二部グラフ
二部グラフ
定義
頂点集合を二つに分割して、その中には辺がないようにできるグラフ
性質
- 二色に塗り分けることができる
- 奇閉路が存在しない(逆も言える)
- 木は二部グラフ
判定
bfsなどで色を塗っていき矛盾が起きなければ、二部グラフ
def is_bipartite(G): n = len(G) color = [-1]*n que = deque([0]) color[0] = 0 while que: v = que.pop() c = color[v] for nv in G[v]: if color[nv]<0: color[nv] = 1-c que.append(nv) elif color[nv] == c: return False return color
問題
頂点集合を二つに分けるパターンと距離の偶奇に関するパターンの二つがあるっぽい 例題1 「頂点集合を二つに分ける」という設定から二部グラフを想起したい。補グラフを考えると、二部グラフに帰着する
例題2 長さ奇数の道があるような2頂点間には必ず辺が惹かれることに築けば二部グラフ