B

来源:互联网 发布:windows arm模拟器 编辑:程序博客网 时间:2024/04/29 06:15

Think:
1知识点:并查集
2思考:可否过程运行中得到每一个集合的元素数目

vjudge题目链接

以下为Accepted代码

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 3e4 + 4;int n, m, f[N];void Init();int get_f(int x);void Merge(int u, int v);int main(){    int i, k, u, v, ans;    while(scanf("%d %d", &n, &m) && (n != 0 || m != 0)){        ans = 0;        Init();        while(m--){            scanf("%d", &k);            if(k)                scanf("%d", &u);            for(i = 1; i < k; i++){                scanf("%d", &v);                Merge(u, v);            }        }        for(i = 0; i < n; i++){            if(get_f(i) == get_f(0))                ans++;        }        printf("%d\n", ans);    }    return 0;}void Init(){    for(int i = 0; i < n; i++)        f[i] = i;}void Merge(int u, int v){    int t1 = get_f(u);    int t2 = get_f(v);    f[t2] = t1;}int get_f(int x){    if(f[x] == x)        return f[x];    else {        f[x] = get_f(f[x]);        return f[x];    }}
原创粉丝点击