T145300 【2020.8.24NOIP模拟赛】这是一棵树吗?(图论)

这是一棵树吗?

在这里插入图片描述

解题思路

这题就是一图论
首先,我们要知道
树中结点数 = 总分叉数 +1
其中总分叉数=每个节点的子树和
但题目中的树的度则是父节点和子节点个数的和
因为树中每个节点最多只有一个父亲
所以每个节点都要-1
但是因为根节点没有父亲,所以还要+1

所以公式为
树 中 节 点 数 = n 个 整 数 的 和 − n + 1 + 1 树中节点数=n个整数的和-n+1+1 =nn+1+1

特判
当n=1,x=0时,要输出Possible
当n=3,x[1]=1,x[2]=0,x[2]=3时,要输出Impossible
所以要特判0的存在

AC代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,x,pd,answer;
int main()
{
    
    
	scanf("%d",&n);//输入
	for(int i=1;i<=n;i++)
	{
    
    
	 	scanf("%d",&x);
	 	answer+=x-1;//累加
		if(!x)pd=1;
	}
	if(n==1&&x==0)//特判
	{
    
    
	 	printf("Possible");
		return 0;
	}
	if(answer+2==n&&pd==0)printf("Possible");//输出
	else printf("Impossible");
	return 0;
}

谢谢

猜你喜欢

转载自blog.csdn.net/weixin_45524309/article/details/108200324