文章目录
- 习题
- 联盟X
- 蓝桥幼儿园
图论基础
并查集
- 并查集,总的来说,操作分为三步
初始化(每一个节点的父亲是自己),定义union(index1,index2)函数,定义find(index)函数
并查集详细内容博客
习题
联盟X
联盟X
- 典型的求解
连通分支的题目
,这个题目求解的最小连通分支 - 我们采用
并查集
进行求解
import os
import sys
from collections import defaultdict# 请在此输入您的代码# 并查集的问题
n, m = map(int, input().split())
# 记录父亲节点
parent = list(range(n + 1))
def find(index1):if parent[index1] != index1:parent[index1] = find(parent[index1])return parent[index1]def union(index1, index2):# parent[index1] = find(parent[index2])parent[find(index1)] = find(index2)for _ in range(m):u, v = map(int, input().split())union(u, v)# 根据祖先计数,也就是同一个并查集的放在一起
store = defaultdict(int)
for i in range(1, n + 1):fa = find(i)store[fa] += 1
print(min(store.values()))
蓝桥幼儿园
蓝桥幼儿园
- 典型的并查集模版题目
import os
import sys# 请在此输入您的代码# 典型的并查集问题N,M = map(int,input().split())
parent = list(range(N+1))def find(index):if parent[index] != index:parent[index] = find(parent[index])return parent[index]def union(index1,index2):parent[find(index1)] = find(index2)for _ in range(M):op,x,y = map(int,input().split())if op == 1:union(x,y)if op == 2:if find(x)==find(y):print("YES")else:print("NO")