题目链接
题目大意
有一棵树,每次操作可以随意找两个叶子节点,使得这两个节点之间的最短路径上加上任意的值,问你是否可以在有限的操作里使得让这个树的每一个边有任意的值。
解题思路
就是找一下这个树中有没有度为2的节点,如果有就不可以。
因为度数一旦大于2,那每次加上的值就可以用另一个边减去,就可以得到任意的值了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int vis[N];
int main()
{
memset(vis,0,sizeof(vis));
int n,x,y;
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
scanf("%d %d",&x,&y);
vis[x]++;
vis[y]++;
}
int flag=0;
for(int i=1;i<=n;i++)
{
if(vis[i]==2)
flag=1;
}
if(flag)
printf("NO\n");
else
printf("YES\n");
return 0;
}