您的位置:首页 > 其它

N - Is It A Tree?(判断环)

2015-07-23 11:18 218 查看
题意,就是判断这点点是不是组成的一颗树,也就是判断是否有环,就是没看出来如果是森林怎么办,试一试吧,最可恶的还没有说有多少节点。。。。。就是个坑//////////////////////////////////////////////////////////////////坑,这题就是一个彻头彻尾的坑,首先数据不连接,需要一个标记数组来判断出现的都是那些节点,数组要开到10w,而且还有可能这棵树没有节点,是一个空树,也就是只有 0 0,还要判断是不是森林,要输出这也是一颗树.....确实很无聊的题目,需要让人试错

#include <stdio.h>

#include<algorithm>
using namespace std;

const int maxn = 100005;

int f[maxn], use[maxn];

void init()
{
for(int i=0; i<maxn; i++)
f[i] = i, use[i] = 0;
}
int Find(int x)
{
if(f[x] != x)
f[x] = Find(f[x]);
return f[x];
}

int main()
{
int u, v, ok=1, t=1;

init();
while(scanf("%d%d", &u, &v), u!= -1 || v!=-1)
{
if(u+v == 0)
{
int sum = 0;

for(int i=0; i<maxn; i++)
{
if(use[i] == 1 && f[i] == i)
sum++;
}

if(ok && sum < 2)printf("Case %d is a tree.\n", t++);
else printf("Case %d is not a tree.\n", t++);

ok = 1;
init();
}
else
{
use[u] = use[v] = 1;
u = Find(u), v = Find(v);
if(u != v)
f[u] = v;
else ok = 0;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: