题解 | #Is It A Tree?#

Is It A Tree?

https://www.nowcoder.com/practice/1c5fd2e69e534cdcaba17083a5c56335

#include<iostream>
using namespace std;

const int MAXN = 10001;
int father[MAXN];
bool visited[MAXN];
int Indegree[MAXN];
int index = 0;
void initConfig()
{ 
	for (int i = 0; i < MAXN; i++)
	{
		father[i] = i;
	}
	fill(visited, visited + MAXN, false);
	fill(Indegree, Indegree + MAXN, 0);
	index++;
}

int findFather(int x)
{
	if (x == father[x])
	{
		return x;
	}
	else
	{
		father[x] = findFather(father[x]);
		return father[x];
	}
}
void  UnionFather(int x,int y)
{
	int x_father = findFather(x);
	int y_father = findFather(y);
	father[y_father] = x_father;
}

bool isTree()
{
	int parts = 0;
	for (int i = 0; i < MAXN; i++)
	{
		if (!visited[i]) continue;
		if (i == findFather(i)) 
		{
			parts++;
			if (Indegree[i] != 0)
			{
				return false;
			}
		}
		else  if(Indegree[i]>1)
		{
			return false;
		}		
	}
	if (parts > 1)
	{
		return false;
	}
	return true;
}

int main()
{
	int a, b;
	initConfig();
	while (scanf("%d %d",&a,&b)!=EOF)
	{
		if (a == -1) 
		{
			break;
		}
		else if (a != 0)
		{
			visited[a] = true;
			visited[b] = true;
			UnionFather(a, b);
			Indegree[b]++;

		}
		else
		{
			if (isTree())
			{
				printf("Case %d is a tree.\n",index);
			}
			else
			{
				printf("Case %d is not a tree.\n", index);
			}
			initConfig();
		}
	}
}

全部评论

相关推荐

2025-12-23 18:51
中南大学 Java
唉又萌混过关:是不是那种收钱盖实习章的机构?
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务