卡码网 107 寻找存在的路径
初识并查集
并查集功能:
- 寻找根节点,函数: find(int u),也就是判断这个节点的祖先节点是哪个
- 将两个节点接入到同一个集合,函数: join(int u, int v),将两个节点连在同一个根节点上
- 判断两个节点是否在同一个集合,函数: isSame(int u, int v),就是判断两个节点是不是同一个根节点
class UnionFind:def __init__(self, size):self.parent = list(range(size + 1))def find(self, u):if self.parent[u] != u:self.parent[u] = self.find(self.parent[u])return self.parent[u]def union(self, u, v):root_u = self.find(u)root_v = self.find(v)if root_u != root_v:self.parent[root_v] = root_udef is_same(self, u, v):return self.find(u) == self.find(v)def main():import sysinput = sys.stdin.readdata = input().split()index = 0n = int(data[index])index += 1m = int(data[index])index += 1uf = UnionFind(n)for _ in range(m):s = int(data[index])index += 1t = int(data[index])index += 1uf.union(s, t)source = int(data[index])index += 1destination = int(data[index])if uf.is_same(source, destination):print(1)else:print(0)if __name__ == '__main__':main()