杭电 1232 并查集水题 畅通工程

来源:互联网 发布:win10 数据恢复 编辑:程序博客网 时间:2024/05/16 17:06

题意:N个城市,判断需要多少条道路连通  

例:8个城市都不连通的话最多需要7条道路

#include <iostream>#include <cstdio>using namespace std;int arr[100001];int p, q;int cnt;void init() {    for (int i=0; i<100001; i++) {        arr[i] = i;    }}int myfind(int x) {    if (x != arr[x]) {        arr[x] = myfind(arr[x]);    }    return arr[x];}void myunion(int a, int b) {    int a1 = myfind(a);    int b1 = myfind(b);    if (a1 != b1) {        arr[a1] = b1;        cnt--;    }}int main() {    int n, m;    while (scanf("%d", &n) && n) {        scanf("%d", &m);        init();        cnt = n - 1;        for (int i=0; i<m; ++i) {            scanf("%d%d", &p, &q);            myunion(p, q);        }        printf("%d\n", cnt);    }    return 0;}


0 0
原创粉丝点击