题意:
一群人玩狼杀,但是只有两种身份,村和狼,然后分别指认别人的身份
村一定说真话,而狼可以说真话说假话,最后问有几个人一定是村,有几个人一定是铁狼
思路:
先是铁村的个数,假设所有人都是狼,显然这个情况是合法的,所以铁村的个数是0,重点就是铁狼的个数
把评价当成边,先忽略狼边,建立一条有向的村边,用村边建图就会有很多个联通块,
这些联通块要么是基环树(点数=边数)要么是树(点数=边数+1)
对于基环树,假设这个联通块所有的人都是村,那么很显然这个方案是合法的,也就是说这些人不是铁狼
再说树,每个人都会有一句评价,那么之所以会是树,就是因为这个联通块存在某个点是狼边的端点
若是这条狼边是描述的狼是另一个联通块的,那么也存在一种方案为当前树节点是村民,其他人都是狼。
因此树上的节点不是铁狼。
最后的就是狼边描述的是这颗树上面的节点,举个例子
1说2是村,2说3是村,3说4是村,而4说2是狼。
因为4说别人是狼,所以先假设4是狼,那么3说4为村,说谎的3也就是狼,类推下去就123都是狼
那么假设4是村,那么2和1就都是狼
综上所述可以得到的结论就是狼边的两端点在同一个联通块的话