2020-10-06

    科技2023-10-21  74

    本题解决方法:并查集

    了解并查集:B站视频

    @Python实现

    # 利用并查集 # 并查集的关键就是 find_root函数 和 union函数(); # find_root函数:(寻找节点的根节点) # union函数:判断如果某条边的两个顶点的root节点一样,说明这两个点在同一个树上(或者说在同一个集合内),此时也说明另一个问题:该“树”一定存在环【有环的就不叫树喽!!】 # 如果root节点不一样,说明这两个顶点处于两个集合中,那么既然他俩有边,可以对这两个集合进行union:parent[x_root] = y_root 或 parent[y_root] = x_root都可以!! def find_root(x, parent): if parent[x] == -1: return x while parent[x]!=-1: x = parent[x] return x def union(x, y, parent): x_root = find_root(x, parent) y_root = find_root(y, parent) if x_root==y_root: return parent[x_root] = y_root return def main(): line = list(map(int, input().split())) row, col = line[0], line[1] parent = [0] + [-1 for i in range(row*col)] # 将所有顶点的父节点初始化为-1,即每个顶点先单独成为一个集合 edges = int(input()) temp = 0 for i in range(edges): line = list(map(int, input().split())) x, y = line[0], line[1] union(x, y, parent) for i in parent: if i==-1: temp += 1 print(temp) return main()
    Processed: 0.016, SQL: 8