本题跟M题很像,但比它简单,只要当0,0时判断就行了,之后再初始化
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100010;
int par[maxn],p[maxn],t[maxn];
int cnt,temp;bool flag;
int find(int x)
{
//cout<<"here"<<endl;
return par[x]==0?x:par[x]=find(par[x]);
}
void init()
{
cnt=temp=0;
memset(par,0,sizeof(par));
memset(p,0,sizeof(p));
flag=false;
}
int main()
{
int a,b,count=0;
//freopen("M.txt","r",stdin);
init();
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==-1&&b==-1)
break;
if(a==0&&b==0)
{
if(!flag)
{
for(int i=0;i<cnt;i++)
{
if(find(t[i])!=find(t[0]))temp++;
}
if(temp) flag=true;
}
printf("Case %d ",++count);
if(!flag) printf("is a tree.\n");
else printf("is not a tree.\n");
init();
continue;
}
int pa=find(a),pb=find(b);
t[cnt++]=a,t[cnt++]=b;
if(pa==pb)
{
flag=true;
}
else
par[pb]=pa;
}
return 0;
}