題目鏈結
求出邊雙聯通分量, 然後在每個分量裡面進行交錯染色,只要出現乙個奇圈,那麼整個分量的頂點都可以滿足條件作為起點。
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef pairp;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-9;
const int n = 1e4 + 5;
struct edge
edge(int a, int b):u(a),v(b)
};vectorg[n];
vectoredges;
int dfn[n],low[n],dfs_clock;
int color[n];
void init(int n)
void addedge(int u, int v)
void dfs(int u, int fa)
}else
low[u] = min(low[u], dfn[v]);
}}int cnt, flag;
void dfs2(int u, int fa, int c)
else if(color[v] == color[u])
flag = 1;
}}int t,n,m,u,v,ans,kase = 0;
int main()
for(int i = 0; i < n; i++)
if(!dfn[i]) dfs(i,i);
memset(color, 0, sizeof(color));
ans = 0;
for(int i = 0; i < n; i++)
printf("case %d: %d\n", ++kase, ans);
}return 0;
}
loj 1300 邊雙聯通 判奇圈 )
思路 首先tarjan標記橋,然後對於dfs遍歷整個圖,我們可以得出乙個簡單的結論,就是如果乙個雙連通分量中存在奇圈,那麼這個雙連通分量中的所有點都可行,於是我們可以dfs染色判奇圈。1 include2 include3 include4 include5 using namespace std ...
邊雙聯通分量
首先什麼是邊雙聯通分量?邊雙連通分量是指,在 無向圖 中刪除任意一條邊依舊聯通的聯通塊 之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。對於邊雙聯通分量中還有乙個概念,就是橋。橋指的是 刪除該邊圖不再連通。對應的另乙個概念是 割點 割點的的是 如果除去此節點和...
邊雙聯通分量
noip最後一次學習 敲板子 橋 如果這條邊去掉後圖的聯通分量增加,則這條邊稱為橋。邊雙聯通分量 如果乙個對於乙個圖的某個子圖,任意兩點至少存在兩條 邊不重複 的路徑,則這個子圖是邊雙聯通分量。很顯然,任意乙個邊雙中不含有橋。除橋外每條邊都僅屬於乙個邊雙。如果把原圖中所有橋刪除,每個聯通分量都是原圖...