题解:P16831 【MX-X29-T2】『FeOI-6』双色二叉树
纪念一下,场切了一个黄。
分析
首先,我们从上到下考虑。根的两个儿子,必有一个涂色,一个不涂,如果都不涂色的话就不是最优情况了,于是就是剩下没有涂色的一个儿子的情况了。那一个儿子的子树中,他又是根了,一样的,根的两个儿子,必有一个涂色,一个不涂,如果都不涂色的话就不是最优情况了,于是就这样递推下去了。根据递推的方案,只有有至少一个节点儿子数量只有一个才可能有解,并且可以通过递推过程快速看出,这是一个充要条件。
代码
// contest 329669 MX-X29 欧尼恩赛 2
// problem B 双色二叉树
// 预期得分:100
#include<stdio.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
bool f=0;
for(int i=1;i<=n;++i){
int a,b;
scanf("%d%d",&a,&b);
if(a==b&&b==0)continue;
if(a==0||b==0){
f=1;
}
}
if(f==1)puts("Yes");
else puts("No");
}
return 0;
}