c889. 2. 二分圖
標籤 :
通過比率 : 184人/215人 ( 86% ) [非即時]
評分方式:
Tolerant

最近更新 : 2019-01-29 19:59

內容

如果一個無向圖 (undirected graph) G 的頂點集合 (vertex set) 可被分割為兩個互不相交的非空子集 A 和 B,使得 G中每一條邊 (edge) 的兩個頂點分別屬於這兩個子集,那麼我們稱G 為一個「二分圖」 (bipartite graph),並稱 A 和 B 是一個有效分割。例如: 圖一(a)是一個二分圖,因為我們可以取 A = {2, 3, 5, 9} 和 B = {1, 4, 6, 7, 8, 10, 11} 使得每一條邊的兩個頂點分別屬於 A 和 B;圖一(b)也是一個二分圖,因為 A = {1, 4, 6, 8, 11, 13} 和 B = {2, 3, 5, 7, 9, 10, 12} 是一個有效分割;圖一(c)則不是一個二分圖,因為不存在任何有效分割。

一個圖 G 是不是二分圖可以判斷如下。我們試著將 G 中的每一個頂點著上白色或黑色。為了方便說明,我們假設 G 是一個連通圖 (connected graph),也就是說 G 中任兩個頂點間都存在一條路徑:而且我們稱白和黑是兩個對立的顏色。開始時我們任選一頂點著上白色,其餘所有頂點都沒有顏色。然後重複以下規則直到每一個頂點都被著上顏色:

 (R) 挑一個有顏色的頂點,將所有和它相鄰的頂點著上對立的顏色。

在過程中如果發現一個已經有顏色的頂點因為 (R) 這個規則必須被著上不同的顏色,那麼就出現了矛盾,G 不是二分圖,可以停止著色。否則,可以看出在著色結束後,白和黑兩群頂點所代表兩個子集 A 和 B 是一個有效分割。

輸入說明

測試資料第一行有兩個數字 n, m ,第一個數字 n 表示圖中的頂點數, 1 < n ≤ 105 ,第二個數字 m 表示圖中的邊數, 1 ≤ m ≤ 106,接下來會有 m 行,每行有兩個正整數 i, j,i ≠ j,1 ≤ i ≤ n,1 ≤ j ≤ n,表示頂點 i 和 j 之間有一條邊。(不會有重複邊)

輸出說明

請輸出一行,如果給定的無向圖 G 不是一個二分圖,請輸出 0;如果給定的無向圖 G 是一個二分圖,請輸出最小的整數 k 滿足 G 存在一個有效分割 A 和 B,其中 A 中的頂點數是 k。

範例輸入 #1
第二子題 輸入範例:
4 4
1 2
4 3
2 4
1 3

第三子題 輸入範例:
11 13
1 2
11 9
5 7
3 11
5 6
3 1
6 9
2 4
4 5
8 5
9 8
9 10
8 2

第四子題 輸入範例:
8 10
6 5
1 4
5 7
8 6
3 1
2 1
5 4
2 5
8 7
6 3

第五子題 輸入範例:
13 12
8 7
1 2
3 6
5 4
1 3
9 8
11 12
10 8
6 5
3 4
6 2
13 12
範例輸出 #1
第二子題 輸出範例:
2

第三子題 輸出範例:
4

第四子題 輸出範例:
0

第五子題 輸出範例:
5
測資資訊:
記憶體限制: 512 MB
提示 :

本題共有四個子題,每一子題可有多筆測試資料:

第一子題,n ≤ 3 且 G 是連通圖,解出可以獲得 15 分;

第二子題,n ≤ 4 且 G 是連通圖,解出可以獲得 15 分;

第三子題,n ≤ 104 且 G 是連通圖,解出可以獲得 40 分;

第四子題,n ≤ 104 (G 不一定是連通圖),解出可以獲得 15 分;

第五子題,n ≤ 105 且 m ≤ 106 (G 不一定是連通圖),解出可以獲得 15 分。

標籤:
出處:
107學年度全國資訊學科能力競賽 [管理者: icube (!@#$%^&*()_...) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
23736 rollfc (胖胖貓) c889
DSU 解法
996 2020-12-14 17:04