如果把“我全都要”看作是我全不要的话,就可以用最小割解决啦 源点S,汇点T 我们试图让每个市民作为一个等待被割断的路径 把狗狗给市民:建边(S,i,1),其中i是市民 把狗狗给守卫:建边(j,T,1),其中j是守卫(也就是边) 市民要在路上所有边看到狗:建边(i,j,1),其中i是市民,j是i经过的边 (众所周知,(!A)&(!B)==!(A|B),所以要把两种选择串起来) 然而这样边数太多了,考虑倍增来优化建边 ...反正就是倍增优化建边,流量给正无穷 最大流=最小割,跑个dinic就行了(要…