栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Acwing:信息中继(并查集 Python)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Acwing:信息中继(并查集 Python)

题目链接:1977. 信息中继 - AcWing题库

分析:

本题需要并查集的知识 建议不熟悉并查集的哥哥姐姐们先了解一下~

解题思路 :

对每头牛 i ,它和另一头牛 a[i] ,参加的是同一个通信链,以此为依据建立并查集。


不会陷入循环的牛的特点:通信链到某头不通信的牛处结束。而不通信的牛一定是根牛。


找到所有通信链(集合)的根牛(并查集的根节点),如果根牛还存在联络对象(说明该通信链还没结束,这头牛还要联系一头牛,且这头牛也在这个集合内),则这是一个存在循环的通信链。

AC代码 (Python3) 

import sys
sys.setrecursionlimit(10000) # 修改递归深度 默认是999 这里N=1000 会爆掉

N = int(input())
group = [i for i in range(N+1)]
lst = [0]

def root(x) : # 并查集模版
    if x != group[x] :
        group[x] = root(group[x])
    return group[x]
    
for i in range(1,N+1) :
    ne = int(input())
    lst.append(ne)
    if ne : group[root(i)] = root(ne) # 合并

res = 0

for i in range(1,N+1) :
    r = root(i) # 第i头牛的根结点
    if not lst[r] : res += 1 # 如果这个根结点还会向其他牛传递信息 说明这是一个环 否则答案+1
print(res)
    
    
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号