题目链接:Goodbye, Ziyin!
题目大意:
给出一颗无根树,询问有多少个节点以它为根时是棵二叉树。
解题思路:
如果一棵树是二叉树,那么应该满足以下条件:
- 根节点最多有两个儿子 => 根节点的度 < 3.
- 非根节点最多有两个儿子 => 非根节点的度 ≤ 3.
所以,先判断一下是否有度>3的节点,若有答案为0,否则,答案为节点的个数 - 度等于3的节点个数。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int main()
{
int n; cin >> n;
for (int i = 1; i < n; i++)
{
int u, v;
scanf("%d %d", &u, &v);
a[u]++; a[v]++;
}
int num = 0, cnt = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] == 3) num++;
if (a[i] > 3) cnt++;
}
if (cnt > 0) printf("0\n");
else printf("%d\n", n - num);
return 0;
}