hdu 1272 挺坑的并查集

来源:互联网 发布:mac 关闭防火墙 编辑:程序博客网 时间:2024/06/03 16:11
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=100005;int fa[maxn],f[maxn];int find(int num){    if(fa[num]==num)        return num;    return fa[num]=find(fa[num]);}int main(){    int flag=0,n,m,i,cnt;    while(scanf("%d%d",&n,&m)!=EOF&&(n!=-1||m!=-1))    {        if(n==0&&m==0)        {            printf("Yes\n");            continue;        }        for(i=0;i<maxn;i++)            fa[i]=i;        memset(f,0,sizeof(f));        fa[n]=m;        f[n]=1;        f[m]=1;        cnt=1;        while(scanf("%d%d",&n,&m)!=EOF&&(n||m))        {            if(flag)                continue;            int sa=find(n),sb=find(m);            if(f[n]==0)            {                cnt++;                f[n]=1;            }            if(f[m]==0)            {                cnt++;                f[m]=1;            }            if(sa==sb)                flag=1;            else            {                fa[sa]=sb;                cnt--;            }        }        if(flag||cnt!=1)            printf("No\n");        else            printf("Yes\n");        flag=0;    }    return 0;}