#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
#define maxn 10005
using namespace std;
int bin[maxn],vis[maxn];
int find(int x)
{
int r=x;
while(bin[r]!=r)
{
r=bin[r];
}
return r;
}
void unio(int x,int y)
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx!=fy)
{
bin[fx]=fy;
}
}
int main()
{
int n,m,t=1;
int flag,max=-1;
int fa,fb;
while(cin>>n>>m)
{
if(n==-1&&m==-1)
{
return 0;
}
if(n==0&&m==0)
{
cout<<"Case "<<t++<<" is a tree."<<endl;
continue;
}
flag=0;
for(int i=0;i<=maxn;i++)
{
bin[i]=i;
vis[i]=0;
}
if(n>max)
{
max=n;
}
if(m>max)
{
max=m;
}
vis[n]=vis[m]=1;
fa=find(n);
fb=find(m);
if(fa==fb)
{
flag++;
}
else
{
unio(fa,fb);
}
while(cin>>n>>m)
{
if(n==0&&m==0)
{
break;
}
if(n>max)
{
max=n;
}
if(m>max)
{
max=m;
}
vis[n]=vis[m]=1;
fa=find(n);
fb=find(m);
if(fa==fb)
{
flag++;
}
else
{
unio(fa,fb);
}
}
for(int i=1;i<=max;i++)
{
if(vis[i]&&bin[i] == i )
{
flag++;
}
}
if(flag==1)
{
cout<<"Case "<<t++<<" is a tree."<<endl;
}
else
{
cout<<"Case "<<t++<<" is not a tree."<<endl;
}
}
return 0;
}
POJ-1308 并查集
最新推荐文章于 2020-01-11 18:47:32 发布