码迷,mamicode.com
首页 > 其他好文 > 详细

【转】POJ-1308-Is It A Tree?

时间:2015-08-06 00:15:28      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

连着三天做并查集了,一天一道,效率低呀···

并查集之后是最小生成树再之后是最短路径,回学校之前把图论基本算法过一遍吧。

回学校还要复习DSA因为开学就是乙级PAT了。

当然英语和健身也不能落下。

这道题要考虑的地方有

①空树

②无环

③非森林

④1 1 0 0 不是树 不能自己指向自己

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int M, N;
const int Size=100;
int Pre[Size+1];
int Visit[Size+1];

void Init()
{
        for(int i=1; i<Size+1; i++)
                Pre[i]=i;
        memset(Visit, 0, sizeof(Visit));
}

int GetPre(int a)
{
        if(Pre[a]!=a)
            Pre[a]=GetPre(Pre[a]);
        return Pre[a];
}

bool Union( int a, int b )
{
        a=GetPre(a);
        b=GetPre(b);
        if(a==b)
            return false;
        Pre[a]=b;
        return true;
}

int main()
{
        int a,  b;
        bool IsTree=true;
        int Case=1;
        while(scanf("%d%d",&a, &b))//每组数据的第一对
        {
                if(a==-1)
                    break;

                if( a==0&&b==0 ){// 空树
                    printf("Case %d is a tree.\n", Case++);
                    continue;
                }
                Init();
                Visit[a]=Visit[b]=1;
                IsTree=true;
                if(a==b)
                    IsTree=false;
                else
                    Union(a, b);
                while(scanf("%d%d", &a, &b))
                {
                        if(a==0&&b==0)
                            break;
                        Visit[a]=Visit[b]=1;
                        if(!Union(a,b))
                            IsTree=false;
                }
                int SetCnt=0;
                for( int i=1; i<Size+1; i++ )
                        if(Visit[i]&&Pre[i]==i)
                            SetCnt++;
                if(SetCnt>1)
                    IsTree=false;

                if(IsTree)
                    printf("Case %d is a tree.\n", Case++);
                else
                    printf("Case %d is not a tree.\n",Case++);
        }
        return 0;
}

  

【转】POJ-1308-Is It A Tree?

标签:

原文地址:http://www.cnblogs.com/FightForCMU/p/4706016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!