题目描述
有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图
现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图
先请你找出冗余边,删除后,使该图可以重新变成一棵树。
输入描述
第一行包含一个整数 N,表示图的节点个数和边的个数。
后续 N 行,每行包含两个整数 s 和 t,表示图中 s 和 t 之间有一条边。
输出描述
输出一条可以删除的边。如果有多个答案,请删除标准输入中最后出现的那条边。
输入示例
3
1 2
2 3
1 3
输出示例
1 3
提示信息
图中的 1 2,2 3,1 3 等三条边在删除后都能使原图变为一棵合法的树。但是 1 3 由于是标准输出里最后出现的那条边,所以输出结果为 1 3
数据范围:
1 <= N <= 1000.
依然是并查集的简单应用,实现代码如下
点击查看代码
def find(s):if s==father[s]:return father[s]else:father[s]=find(father[s])return father[s]
def join(s,t):root_s=find(s)root_t=find(t)if root_s==root_t:returnelse:father[root_t]=root_s
def is_same(s,t):return find(s)==find(t)
if __name__=="__main__":n=int(input())father=list(range(n+1))result=Nonefor i in range(n):s,t=map(int,input().split())if not is_same(s,t):join(s,t)else:result=str(s)+" "+str(t)
print(result)
