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;
}

posted @ 2010-08-27 14:12  菜到不得鸟  阅读(527)  评论(0)    收藏  举报