51nod 1299 監獄逃離

2022-08-20 06:12:07 字數 2349 閱讀 3735

1299 監獄逃離

基準時間限制:1 秒 空間限制:131072 kb

監獄有n條道路連線n + 1個交點,編號0至n,整個監獄被這些道路連在一起(任何2點之間都有道路),人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人(m <= n + 1),剩下的點可以安排警衛,有警衛把守的地方犯人無法通過。給出整個監獄的道路情況,以及犯人所在的位置,問至少需要安排多少個警衛,才能保證沒有1個犯人能夠逃到出口,如果總有犯人能夠逃出去,輸出-1。

如上圖所示,點1,6 住著犯人,0,4,5,7,8是出口,至少需要安排4個警衛。

input

第1行:2個數n, m中間用空格分隔,n表示道路的數量,m表示犯人的數量(1<= n <= 100000, 0 <= m <= n + 1)。

之後n行:每行2個數s, e中間用空格分隔,表示點編號為s的點同編號為e的點之間有道路相連。(0 <= s, e <= n)。

之後的m行,每行1個數pi,表示編號為pi的點上有犯人。

output

輸出1個數對應最少需要多少警衛才能不讓犯人逃出監獄。
input示例

8 2

0 11 2

2 33 4

3 52 6

6 86 7

16

output示例

4

仔細推就行了。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9 typedef long

long

ll;10 typedef long

double

ld;11 typedef pairpr;

12const

double pi=acos(-1

);13

#define rep(i,a,n) for(int i=a;i<=n;i++)

14#define per(i,n,a) for(int i=n;i>=a;i--)

15#define rep(i,u) for(int i=head[u];i;i=next[i])

16#define clr(a) memset(a,0,sizeof(a))

17#define pb push_back

18#define mp make_pair

19#define fi first

20#define sc second

21#define pq priority_queue

22#define pqb priority_queue , less>

23#define pqs priority_queue , greater>

24#define vec vector

25 ld eps=1e-9

;26 ll pp=1000000007

;27 ll mo(ll a,ll pp)

28 ll powmod(ll a,ll b,ll pp)

29void fre()

30//

void add(int x,int y,int z)

31int dx[5]=,dy[5]=;

32 ll read()

37bool flag,fl[100005

];38

int ans,v[200005],next[200005],head[200005],e,in[200005],root,dp[200005

];39

void add(int x,int y)

40void dfs(int x,int

f)50

if(fl[x])

52 ans+=ans1; dp[x]=2

;53 } else

58if (ans1 && !ans2)

59if (ans2 && !ans1)

60if (!ans1 && !ans2)

62else 63}

64}65}

66int

main()

75if (m==0)

76for (int i=1;i<=m;i++)

79 dfs(root,-1

);80

if (flag) puts("-1"

);81 printf("%d"

,ans);

82return0;

83 }

view code

51nod 1299 監獄逃離

監獄有n條道路連線n 1個交點,編號0至n,整個監獄被這些道路連在一起 任何2點之間都有道路 人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人 m n 1 剩下的點可以安排警衛,有警衛把守的地方犯人無法通過。給出整個監獄的道路情況,以及犯...

51Nod 1299 監獄逃離

這其實是一道樹形dp的神仙題。然後開始推推推,1 hour later樣例都過不了 然後仔細一看題目,貌似像乙個最小割模型,然後5min想了想建圖 首先拆點,將每個點拆成進和出兩個,然後連邊,邊權即為 1 表示割掉這條邊的代價 然後設超級源 s 讓 s 向所有犯人的出點 因為犯人的點無法割去 連邊,...

51nod 1299 監獄逃離

監獄有n條道路連線n 1個交點,編號0至n,整個監獄被這些道路連在一起 任何2點之間都有道路 人們通過道路在交點之間走來走去。其中的一些交點只有一條路連線,這些點是監獄的出口。在各個交點中有m個點住著犯人 m n 1 剩下的點可以安排警衛,有警衛把守的地方犯人無法通過。給出整個監獄的道路情況,以及犯...