hdu1325 pku1308 Is It A Tree
#include stdio.h
#include string.h
#include stdlib.h
#define MAXN 1005
int father[MAXN];
bool exist[MAXN];
int find(int x)
{
int i,t;
for(i=x; father[i]0; i=father[i]) ;
while(x!=i)
{
t=father[x];
father[x]=i;
x=t;
}
return i;
}
bool merge(int x,int y)
{
int fx=find(x),fy=find(y);
printf(x=%d y=%d fx=%d fy=%dn,x,y,fx,fy);
if(fx==fy) return false;
if(father[y] 0) return false;
father[fy]=fx;
return true;
}
int main()
{
int i,j,maxid,cas=1;
while(scanf(%d %d,&i,&j) && (i!=-1 && j!=-1))
{
if(i0) break;
memset(father,-1,sizeof(father));
memset(exist,false,sizeof(exist));
maxid=-1;
bool ok=true;
while(i+j)
{
if(ok)
{
ok=merge(i,j);
exist[i]=exist[j]=true;
if(imaxid) maxid=i;
if(jmaxid) maxid=j;
}
scanf(%d %d,&i,&j);
}
for(i=1; i=maxid; i++)
if(exist[i]) break;
int fi=find(i++);
while(i=maxid)
{
if(exist[i] && find(i) != fi)
{
ok=false;
break;
}
i++;
}
if(ok) printf(Case %d is a tree.n,cas++);
else printf(Case %d is not a tree.n,cas++);
}
return 0;
}
浙公网安备 33010602011771号