hdu-1272

来源:互联网 发布:软件项目实施进度表 编辑:程序博客网 时间:2024/06/11 00:05
#include<iostream>#include<math.h>#include<stdlib.h>#include<ctype.h>#include<algorithm>#include<vector>#include<string.h>#include<queue>#include<stack>#include<set>#include<map>#include<sstream>#include<time.h>#include<utility> #include<malloc.h> #include<stdexcept>using namespace std;int p[1000000];int sset[100020];int a,b;int num=0;int find (int i){    if (i==p[i])        return i;    else        return find (p[i]);}void un (int a,int b){    int fa = find (a);    int fb = find (b);    if (fa == fb )    {        num++;//判断是否成环        return ;    }    else     {        if (fa>fb)            p[fa]=fb;        else             p[fb]=fa;    }}int main (){    while (cin>>a>>b)    {        num=0;        if (a==-1 && b==-1)            break;        if (a==0 && b==0)        {            printf("Yes\n");            continue;        }        for (int i=1;i<=100010;i++)        {            p[i]=i;            sset[i]=0;        }        un(a,b);        sset[a]=1;        sset[b]=1;        while (cin>>a>>b)        {            if (a==0 && b==0)                break;            sset[a]=1;            sset[b]=1;            un(a,b);        }        int count=0;        for(int i=1;i<=100010;i++)        {            if (sset[i] && i==p[i])//判断图是否联通 只要最后判断根节点的总数为1即可。                count++;        }        if (count>1)            printf("No\n");        else            if (num == 0)            printf("Yes\n");        else            printf("No\n");    }    return 0;}

0 0
原创粉丝点击