题意:给你一个树,有一种操作,选择两个叶子节点,然后把这两个叶子节点间的路径全部加或减一个值。问你给出的树上的每一条边经过若干次操作是否可以为任意值。
分析:画几个图后可以发现,如果树中存在一个点的度数为2,那么与它相连的两条边的值就一定相同,度为一就为叶子节点,度>=3就可以通过操作来独立出这条边来,所以只要判断有没有度为二的点就好。
#include<bits/stdc++.h> using namespace std; long long i,n,k,x,a[100050]; int main() { cin>>n; for(i=1;i<n;i++) { cin>>x>>k; a[x]++;a[k]++; } for(i=1;i<=n;i++) { if(a[i]==2) { cout<<"NO"<<endl;return 0; } } cout<<"YES"<<endl; }