这是一棵树吗?
解题思路
这题就是一图论
首先,我们要知道
树中结点数 = 总分叉数 +1
其中总分叉数=每个节点的子树和
但题目中的树的度则是父节点和子节点个数的和
因为树中每个节点最多只有一个父亲
所以每个节点都要-1
但是因为根节点没有父亲,所以还要+1
所以公式为
树 中 节 点 数 = n 个 整 数 的 和 − n + 1 + 1 树中节点数=n个整数的和-n+1+1 树中节点数=n个整数的和−n+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;
}