#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,cas=0;
while(scanf("%d%d",&n,&m)!=EOF&&(n>=0||m>=0))
{
if(n==0&&m==0)
{
printf("Case %d is a tree.\n",++cas);
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;
}
else
{
flag=1;
continue;
}
if(sa==sb)
flag=1;
else
{
fa[sa]=sb;
cnt--;
}
}
if(flag||cnt!=1)
printf("Case %d is not a tree.\n",++cas);
else
printf("Case %d is a tree.\n",++cas);
flag=0;
}
return 0;
}
hdu 1325 并查集(坑)
最新推荐文章于 2018-04-07 14:14:06 发布