題意:N個點(0~n-1),M條無向邊,問去掉2個點後最多的連通分塊有多少。
先去掉一個點求出各個割點,並在dfs過程中求出去掉這個割點有多少個連通分塊(將iscut[u]=true改為iscut[u]++),
這樣子第二次就可以直接找出最多的連通分塊了。
#include #include #include #include #include #include #include #include #include using namespace std; #define M 5005 int pre[M],dfs_clock,iscut[M],low[M],bcc_cnt,bccno[M]; vectorG[M],bcc[M]; struct Edge { int from,to; }edge[M*2]; int edge_num,head[M]; void add_edge(int u,int v) { edge[edge_num].from=v; edge[edge_num].to=head[u]; head[u]=edge_num++; } int del; int dfs(int u,int fa) { int lowu=pre[u]=++dfs_clock; for(int i=head[u];i!=-1;i=edge[i].to) { int v=edge[i].from; if(v==del) continue; if(!pre[v]) { int lowv=dfs(v,u); lowu=min(lowv,lowu); if(lowv>=pre[u]) iscut[u]++; } else if(pre[v]
199也是質數。 [p
步驟 2. Hello, World!很遺憾,但我們仍然無
題目描述: 今天是2007年10月17日,星期六. 現
為什麼要限制並發連接數? 一方面,我們不希望服務程序
[plain] /* 程序頭部注釋開始(為避免提交博文
1 引言C語言是一種編譯型程序設計語言,它兼顧了多種高級語言