UVA 1160 X-Plosives(并查集)

来源:互联网 发布:淘宝客微信群拉人好难 编辑:程序博客网 时间:2024/05/30 12:30

可以把一个化合物看成一条边,那么两端点就是化合物的两个元素,如果k个化合物,k个元素,那么代表这k条边练成了一个环,所以用并查集来判断就可以了。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ss(x) scanf("%d",&x)const int maxn=100000;int fa[maxn];int getroot(int x) {return fa[x]==x?x:fa[x]=getroot(fa[x]);}int main(){    int x,y;    while(ss(x)!=EOF)    {        rep(i,1,maxn) fa[i]=i;        int refuse=0;        while(true)        {            if(x==-1) break;            ss(y);            x=getroot(x);y=getroot(y);            if(x==y) refuse++;            else fa[y]=x;            ss(x);        }        cout<<refuse<<endl;    }    return 0;}


0 0
原创粉丝点击