一張無向圖, 問至少設定幾個點使得當刪除乙個點後其他所有點能到達設定點,以及方案數。
點不能設定在割點, 所以對於斷開割點形成的所有雙連通分量中,進行分類討論。
#includeusing namespace std;
typedef long long ll;
const int maxn = 2000 + 50;
const int inf = 0x3f3f3f3f;
struct node edge[maxn];
int tot, cnt;
int dfn[maxn], low[maxn];
int head[maxn];
bool is_true[maxn];
void add(int from, int to)
void tarjan(int u, int rt)
low[u] = min(low[u], dfn[v]);
}if(u == rt && rc >= 2) is_true[u] = true;
}int vis[maxn], match[maxn];
void init()
int num, sz;
void dfs(int u, int rt)
return;
}if(vis[u]) return;
vis[u] = 1;sz++;
for(int i = head[u];i != -1;i = edge[i].next)
}int main()
for(int i = 1;i <= n;i++) if(!dfn[i]) tarjan(i, i);
for(int i = 1;i <= n;i++)
else if(num == 0)}}
cout << "case " << cas++ << ": " << k << " " << ans << endl;
}return 0;
}
HNOI2012 礦場搭建
題目鏈結 演算法 對於任何乙個聯通塊,如果坍塌的是乙個聯通塊中的割點的話,那麼分割成的兩個小聯通塊中必須保證各有乙個出口。我們考慮所有的割點將原圖分割成若干個小聯通塊接下來分類討論 1 小塊不與任何乙個割點相連,那我們需要在這裡設立兩個出口,以保證任何乙個出口坍塌後,還有乙個出口可用。2 小塊只與乙...
HNOI2012 礦場搭建
顯然需要求一下點雙 然後列舉每乙個點雙,考慮進行分類討論 如果這乙個聯通塊裡面只有這乙個點雙,也就是這個點雙裡面沒有割點,那麼我們至少需要建造兩個出口,才能保證能跑出去 因為有可能選的那個塌了 如果這個點雙裡面有乙個割點,那麼有兩種情況,一種是割點塌了,這樣我們需要選出1個點,或者割點沒塌,這樣我們...
HNOI2012 礦場搭建
其實是劉汝佳藍書上面的例題啦,wf2011的乙個題 首先我們可以發現,把割頂塗上是不優的。因為刪掉它之後,因此被和原圖斷掉的那一部分就沒有黑點了,它對不連通的分量產生不了任何貢獻。所以我們要先預處理出來點雙聯通分量的割頂,不塗割頂。其次,對於乙個雙聯通分量來講,我們到底要塗幾個呢?其實乙個就夠了,因...