UVALive - 3644 并查集

来源:互联网 发布:苹果淘宝旗舰店是官方 编辑:程序博客网 时间:2024/05/01 18:42

并查集详细分析:http://blog.sina.com.cn/s/blog_87cb8e680100skd7.html

/*    主要是两个函数find  和 join.    本题大意,一些物品装车,来一件物品就要判断,    是否与已经装车的物品时联通的,联通不要,不连通装车,并且并到里面*/#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;int inf = 100010,pre[100010],num;int find(int x){    return pre[x] != x? pre[x] = find(pre[x]):x;}int join(int x,int y){    x = find(x), y = find(y);    if(x == y) num++;    else pre[x] = y;}int main(){    int x,y,i;    while(cin>>x)    {        num = 0;        for(i = 0; i < inf; i++)            pre[i] = i;        while(x != -1)        {            cin>>y;            join(x,y);            cin>>x;        }        cout<<num<<endl;    }return 0;}


0 0