恩,又是网络流,一个sap完事。。
发现网络流这东西确实很厉害,很多东西很多模型都需要用到它。。
题目大意:
一堆房子,有的房子之间有门,有的房子有侵入者,有的房子没有侵入者,有一个房间需要保护。I代表没有侵入者,NI代表有侵入者,一开始的N,M代表的n个房间和m房间需要保护。NI或者I后边跟一个k,然后后边k个数表示从第i个房间可以到达这些个房间不需要钥匙,而这k个房间到达第i个房间只能到达一次或者从第i个房间过去再过来。。。
简略题解:
仔细一看就是一个最小割。
需要保护的房间m就是汇点,新增源点s,如果这个房间没有侵入者,那么从源点向这个点连一条流量为inf的边。对于其他的门,如果是i到j的门,那么从i连一条到j的流量为inf的边,从j到i连一条流量为1的边,这样就确保了从j到i只能进去一次或者进来再出去。
然后就是个最大流就可以了,如果最后的答案比inf还要大,那么肯定存在一条直接通往被保护房间的路径,那么无解。否则答案就是最小割。
附程序: