321
社区成员




小明参加了个大型聚会。聚会上有n个人参加,我们将他们编号为1..n,有些人已经互相认识了,有些人还不认识。聚会开始后,假设A跟B认识,A会给所有他认识的人介绍B,原先跟A认识,但不认识B的人,都会在此时,跟B互相认识。当所有人都把自己认识的人介绍一遍后,此时n个人就会形成k个交际圈,同一个交际圈中,两两互相认识,不同的交际圈之间,互相不认识 问题:当所有人都把自己认识的人介绍一遍后,形成了多少个交际圈
其实这个题目,还有天然气订单,蚂蚁家族,这三个题目都是查并集的题目,如果没有超时问题,上次天然气订单65939题目的方法就能用,可惜那个算法太浪费时间了。所以只能从新写一份,优化一下。
n,m = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(m)]
z = {v:{v} for v in range(1,n + 1)}
t = {}
for i in range(m):
a,b = sorted(arr[i])
c,d = a,b
while c in t:
c = t[c]
while d in t:
d = t[d]
c,d = sorted([c,d])
if c != d:
z[c] |= z[d]
del z[d]
t[d] = c
print(len(z))