hdu 1272并查集

来源:互联网 发布:北京供销社大数据集团 编辑:程序博客网 时间:2024/05/19 04:06
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<cstdlib>#include<ctime>#include<vector>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;struct node{    int data;    int rank;    int parent;};int prove;node mpt[100005];int find(int x){    if(x!=mpt[x].parent)return find(mpt[x].parent);    else return x;}void unit(int x,int y){    x=find(x);    y=find(y);    if(x==y)prove=1;    if(mpt[x].rank>mpt[y].rank)mpt[y].parent=x;    else if(mpt[x].rank<mpt[y].rank)mpt[x].parent=y;    else    {        mpt[x].parent=y;        mpt[y].rank++;    }}int a[1000000];int main(){    while(1)    {        prove=0;        int i;        for(i=1;i<=100000;i++)        {            mpt[i].data=i;            mpt[i].rank=0;            mpt[i].parent=i;        }        int p=0;        while(1)        {            int x,y;            scanf("%d%d",&x,&y);            if(x==-1&&y==-1)return 0;            if(x==0&&y==0)break;            if(x==y)continue;            a[++p]=x;            a[++p]=y;            unit(x,y);        }        int ans=0;        for(i=1;i<=p;i++)        {            int v=find(a[i]);            if(ans==0)ans=v;            if(ans!=v)prove=1;        }        if(prove==1)printf("No\n");        else printf("Yes\n");    }    return 0;}//YSF友情赞助!!!!

0 0