這其實是一道樹形dp的神仙題。
然後開始推推推,1 hour later樣例都過不了
然後仔細一看題目,貌似像乙個最小割模型,然後5min想了想建圖:
首先拆點,將每個點拆成進和出兩個,然後連邊,邊權即為\(1\)(表示割掉這條邊的代價)
然後設超級源\(s\),讓\(s\)向所有犯人的出點(因為犯人的點無法割去)連邊,邊權為\(\infty\),然後對於所有的出口(葉子節點),都向\(t\)連邊,邊權為\(\infty\)。
最後根據題目給出的關係建邊,然後因為這些邊不可以被割掉,因此邊權為\(\infty\)
然後據說dinic的最劣複雜度是\(o(n^2m)\)的,所以直接沒有畏懼地交了
然後a了?!第一次看到51nod的題資料這麼水(然後莫名複習了一波網路流)
當然正解是樹形dp,當然可以看陳瀟然dalao的部落格
diniccode
#include#include#includeusing namespace std;
const int n=100005,inf=1e9;
struct edge
e[n<<4];
int head[n<<1],n,cnt=-1,m,x,y,dep[n<<1],q[n<<1],s,t,l[n<<1];
inline char tc(void)
inline void read(int &x)
inline void double_add(int x,int y,int z)
inline int min(int a,int b)
int main()
return printf("%d",dinic()),0;
}
51nod 1299 監獄逃離
監獄有n條道路連線n 1個交點,編號0至n,整個監獄被這些道路連在一起 任何2點之間都有道路 人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人 m n 1 剩下的點可以安排警衛,有警衛把守的地方犯人無法通過。給出整個監獄的道路情況,以及犯...
51nod 1299 監獄逃離
監獄有n條道路連線n 1個交點,編號0至n,整個監獄被這些道路連在一起 任何2點之間都有道路 人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人 m n 1 剩下的點可以安排警衛,有警衛把守的地方犯人無法通過。給出整個監獄的道路情況,以及犯...
51nod 1299 監獄逃離
1299 監獄逃離 基準時間限制 1 秒 空間限制 131072 kb 監獄有n條道路連線n 1個交點,編號0至n,整個監獄被這些道路連在一起 任何2點之間都有道路 人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人 m n 1 剩下的點可...