题解:P13697 「CyOI」黑影杀

· · 题解

这题并没有这么难,没过的改加训数数了/kx

首先发现只要你死了就不会区分有没有杀人,所以一个初步的想法是先确定每个人的死活情况,然后活人的前驱一定都死了,死人要选一个活人前驱或者选所有死人前驱(前提是前驱不能全是活人)。这样在树上可以轻松写一个树形 dp。

然后考虑有一个环的情况。首先自环看上去就很特殊,这个人死定了,先特判掉。(前驱一定有死人)正常环的话考虑断环为链,先随便断掉一条边,然后枚举链的终点是死的还是活的,做一下 dp 就行了。但是写完发现前两个样例恰好多一,说明数多了。经过思考发现唯一多数的情况形如环上都死了,环的前驱都活了,环上所有点都选的死人前驱。因为一个大小大于一的环不能死光了。把这种情况减去即可。

多个连通块的答案显然是每个连通块的乘积。那么这题就做完了,代码也是不难的。