大致题意: 在一棵树中有 N N N条边连接 N + 1 N+1 N+1个节点,现在已知这棵树上的 M M M个节点,要求封住最少的节点,使这 M M M个节点中的任意一个节点无法到达叶子节点,若能办到输出最少封住的节点数,若不能输出 − 1 -1 −1。
这道题目的正解是树形 D P DP DP( h l 666 hl666 hl666大佬说用 O ( n 2 m ) O(n^2m) O(n2m)的最小割也可以过这道题,不过这篇博客并不讨论这种做法,他能做出来是因为他是常数之神)。
树形 D P DP DP,一般都将状态由子节点向父节点转移,这题当然也不例外。
我们可以用 f f f数组来存储每一个节点的状态:
若 f [ i ] = 0 f[i]=0 f[i]=0,则说明该节点已被完全封死,相当于既不可能有犯人到达这里,也不可能从这里到达出口。
若 f [ i ] = 1 f[i]=1 f[i]=1,则说明可以从这个节点到达叶子节点。
若 f [ i ] = 2 f[i]=2 f[i]=2<