luogu T145300 这是一棵树吗
Description–
DD和QQ在玩游戏,DD在地上画了一棵树(图论中的树),然后他告诉QQ这棵树的度数序列。QQ马上说这不是一棵树。DD认为自己被QQ鄙视了,他们吵了起来。
但DD随后发现自己算错了度数序列,QQ说的是对的。DD很奇怪为什么QQ反应得这么快。
现在给出一个图的度数序列,你需要做的就是像QQ一样:判断这是否可能是一棵树的度数序列。
Input–
输入只有一行,首先给出一个整数 NNN,表示顶点个数,后面跟着 NNN 个整数,表示这个图的度数序列,每个数不超过 100100100。
Output–
如果输入可能是一棵树的度数序列,则输出“Possible”,否则输出“Impossible”。
Sample Input–
样例1
1 0
样例2
2 1 1
样例3
3 2 2 2
样例4
3 1 2 1
Sample Output–
样例1
Possible
样例2
Possible
样例3
Impossible
样例4
Possible
说明–
对于 100%100%100% 的数据,有 1≤N≤1001\le N\le 1001≤N≤100
解题思路–
一个点的度数=入度+出度
则一棵树的点的度数和为边的两倍
由一棵树的边的总数为 n - 1
可判断此树是否成立
代码–
#include <iostream>
#include <cstdio>
using namespace std;
int n, a, ans;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &a);
if (a >= n) //一个点的度数最大是n - 1
{
printf("Impossible");
return 0;
}
ans += a;
}
if ((ans /= 2) != (n - 1))
printf("Impossible");
else printf("Possible");
return 0;
}