hdu 1272 并查集判断树的构成

来源:互联网 发布:淘宝香水的货源 编辑:程序博客网 时间:2024/06/07 04:47

         这次的组队赛用上了通过并查集来判断树的构成情况的题目,先做这道题练练

#include<iostream>#include<cstdio>#include<string>#define maxn 100010using namespace std;int fa[maxn];int mark[maxn];int find(int x){    return fa[x]==x?x:find(fa[x]);}void Union(int a,int b){    int x=find(a);    int y=find(b);    if(x!=y) fa[a]=b;;}int main(){    int m,n;    while(scanf("%d%d",&m,&n))    {        if(m==-1&&n==-1) break;        if(m==0&&n==0)            {                cout<<"Yes"<<endl;                continue;            }        for(int i=0;i<maxn;i++)        {            mark[i]=0;            fa[i]=i;        }        Union(m,n);        mark[m]=mark[n]=1;        int flag=1;        while(scanf("%d%d",&m,&n))        {            if(m==0&&n==0)  break;            int x=find(m);            int y=find(n);            if(x==y)  flag=0;            else  Union(x,y);            mark[m]=mark[n]=1;        }        if(!flag)  cout<<"No"<<endl;        else        {            for(int i=0;i<maxn;i++)                if(mark[i]&&fa[i]==i)  flag++;             if(flag==2)  cout<<"Yes"<<endl;            else cout<<"No"<<endl;        }}    return 0;}


0 0
原创粉丝点击