題意: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]
創建按鈕有好幾種方法。你可以用 gtk_button_new
6、自動滾屏 dp@dp:~/cursestest % ca
效果圖/*-------------------------
在項目開發中,經常需要讀取應用配置文件的初始化參數,在應用啟
我們定義delete鍵為刪除某個字符,回車符表示換行,同時定
在學習C++ STL的sort函數,發現C中