HNOI2012 礦場搭建

2022-05-15 17:54:10 字數 1281 閱讀 5610

/*

codevs 1996 連通性問題

tarjan+割點 可以感性的想一想 一定炸割點最好

否則 沒有什麼影響 先求出割點來

對於剩下的點們 縮一下 當然不能包括割點

這裡的縮 因為刪了割點就不是純粹的雙連通分量了

所以dfs縮點 不走割點

然後這張圖就成了一些被割點分開的聯通塊

如果乙個塊塊連著兩個割點 那麼這裡面就不用建

因為一邊的炸了可以走另一邊

相對的如果這個塊塊只連著乙個割點那麼就必須建乙個 位置隨便

如果沒有連著割點的話 就在內部選兩個

*/#include

#include

#include

#include

#define ll long long

#define maxn 510

using

namespace

std;

intn,m,num,head[maxn],topt,c[maxn],r[maxn],matc[maxn],ans,cas;

intf[maxn],low[maxn],dfn[maxn],sum,size[maxn];

ll cnt;

struct

nodee[maxn*maxn];

intinit()

while(s>='

0'&&s<='9')

return x*f;

}void add(int

from,int

to)void

cl()

void dfs(int u,int

from

)

else low[u]=min(low[u],dfn[v]);

}if(from

<0&&x==1)c[u]=0;}

void dfs(int

x) }

}int

main()

for(int i=1;i<=n;i++)

if(dfn[i]==0)dfs(i,-1

);

for(int i=1;i<=n;i++)

if(c[i]==0&&f[i]==0

)

if(sum==1

)

else

}printf(

"case %d: %d

",++cas,ans);cout}

return0;

}

HNOI2012 礦場搭建

題目鏈結 演算法 對於任何乙個聯通塊,如果坍塌的是乙個聯通塊中的割點的話,那麼分割成的兩個小聯通塊中必須保證各有乙個出口。我們考慮所有的割點將原圖分割成若干個小聯通塊接下來分類討論 1 小塊不與任何乙個割點相連,那我們需要在這裡設立兩個出口,以保證任何乙個出口坍塌後,還有乙個出口可用。2 小塊只與乙...

HNOI2012 礦場搭建

顯然需要求一下點雙 然後列舉每乙個點雙,考慮進行分類討論 如果這乙個聯通塊裡面只有這乙個點雙,也就是這個點雙裡面沒有割點,那麼我們至少需要建造兩個出口,才能保證能跑出去 因為有可能選的那個塌了 如果這個點雙裡面有乙個割點,那麼有兩種情況,一種是割點塌了,這樣我們需要選出1個點,或者割點沒塌,這樣我們...

HNOI2012 礦場搭建

其實是劉汝佳藍書上面的例題啦,wf2011的乙個題 首先我們可以發現,把割頂塗上是不優的。因為刪掉它之後,因此被和原圖斷掉的那一部分就沒有黑點了,它對不連通的分量產生不了任何貢獻。所以我們要先預處理出來點雙聯通分量的割頂,不塗割頂。其次,對於乙個雙聯通分量來講,我們到底要塗幾個呢?其實乙個就夠了,因...