思路:首先tarjan標記橋,然後對於dfs遍歷整個圖,我們可以得出乙個簡單的結論,就是如果乙個雙連通分量中存在奇圈,那麼這個雙連通分量中的所有點都可行,於是我們可以dfs染色判奇圈。
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6#define maxn 2222278
struct
edgeedge[maxn<<1
];11
12int
n,m,ne;
13int
head[maxn];
1415
void insert(int u,int
v)16
2122
intlow[maxn],dfn[maxn],cnt;
23bool bridge[maxn<<1
];24
bool
mark[maxn];
2526
void tarjan(int u,int
father)
2739 }else
if(mark[v])42}
43}4445
intflag,ans;
46int
color[maxn];
4748
void dfs(int u,int
state)
49else
if(color[v]==0)60
}61}62
63int
main()
6476 cnt=0
;77 memset(mark,false,sizeof
(mark));
78 memset(dfn,0,sizeof
(dfn));
79 memset(bridge,false,sizeof
(bridge));
80for(int i=0;iif(dfn[i]==0
)tarjan(i,i);
81 memset(color,0,sizeof
(color));
82 ans=0;83
for(int i=0;i)90}
91 printf("
case %d: %d\n
",t++,ans);92}
93return0;
94}9596
9798
LightOJ 1300 邊雙聯通分量 交錯路染色
題目鏈結 求出邊雙聯通分量,然後在每個分量裡面進行交錯染色,只要出現乙個奇圈,那麼整個分量的頂點都可以滿足條件作為起點。include include include include include include include include include include include in...
邊雙聯通分量
首先什麼是邊雙聯通分量?邊雙連通分量是指,在 無向圖 中刪除任意一條邊依舊聯通的聯通塊 之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。對於邊雙聯通分量中還有乙個概念,就是橋。橋指的是 刪除該邊圖不再連通。對應的另乙個概念是 割點 割點的的是 如果除去此節點和...
邊雙聯通分量
noip最後一次學習 敲板子 橋 如果這條邊去掉後圖的聯通分量增加,則這條邊稱為橋。邊雙聯通分量 如果乙個對於乙個圖的某個子圖,任意兩點至少存在兩條 邊不重複 的路徑,則這個子圖是邊雙聯通分量。很顯然,任意乙個邊雙中不含有橋。除橋外每條邊都僅屬於乙個邊雙。如果把原圖中所有橋刪除,每個聯通分量都是原圖...