poj1308Is It A Tree

来源:互联网 发布:淘宝免费使用怎么申请 编辑:程序博客网 时间:2024/05/20 21:46

根据输入数据判断能否构造成一棵树,模拟太烦,用并查集做


#include<iostream>#include<cstdio>using namespace std;int a,b,x,y,num=0,sum;int sets[50000];bool flag,nodes[50000],isnode[50000];int findset(int x){    int y;    if(sets[x]==x) return x;    else y=findset(sets[x]);    sets[x]=y;    return y;}int main(){    while(1){        num++;        flag=true;        for(int i=0;i<50000;i++){            sets[i]=i;            nodes[i]=false;            isnode[i]=false;        }        scanf("%d%d",&a,&b);        if(a==-1&&b==-1) break;        while(1){            if(a==0&&b==0) break;            x=findset(a);            y=findset(b);            if(nodes[b]&&flag){                flag=false;                printf("Case %d is not a tree.\n",num);            }            if(x==y&&flag){                flag=false;                printf("Case %d is not a tree.\n",num);            }            else{                sets[x]=y;                nodes[b]=true;                isnode[a]=isnode[b]=true;            }            scanf("%d%d",&a,&b);        }        sum=0;        for(int i=0;i<50000;i++)        if(!nodes[i]&&isnode[i]) sum++;        if(sum!=1&&sum!=0){                flag=false;                printf("Case %d is not a tree.\n",num);        }        if(flag) printf("Case %d is a tree.\n",num);    }    return 0;}



原创粉丝点击