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