T2 rab
首先对于一个点 x , 如果他的儿子中红色的节点多于蓝色的节点那他一定最后是红色胜利,
反之,如果蓝色多于红色那就是蓝色胜利。如果红色与蓝色一样多那就是平局也就是先手胜(谁先选谁就胜)
就这么一直递推,推到根就得到了第一问的答案。
考虑第二问。
设一个函数redWin(x) 表示在x的子树中选出那些可以让x最后为红胜的叶子节点。
firstWin(x) 表示在x的子树中选出那些可以让x从蓝胜变成先手胜的叶子结点。
redWin(x)
如果x本来就是红胜 , 则选x的所有叶子节点
遍历所有的儿子 v
如果v是平局 ,那就取v的红胜
如果v是蓝胜,那就取v的先手胜
firstWin(x)
判断是否可行
1、平局的儿子数要是偶数,不然没有办法平局
2、蓝色只比红色多一个。
遍历所有的儿子 v
如果v是平局 ,那就取v的红胜
如果v是蓝胜,那就取v的先手胜