直接注文2I-1 および2I の位置が同一ではない、の等価 2N 二部グラフの染色に供側面は、(図特定の奇数このループは存在しません)。
所与の仮定のn 個の関係、クラス側2I。1-及び2I側である Bのクラスの側、パスが見つけなければならないABを交互に(AS A / Bの端部があってはならないA / Bは、出発点)その後、リングは、必ずしも同じ量である側とB 側、即ち摩擦リング。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define N 200005 4 構造体JI { 5 int型のNEX、であり; 6 }エッジ[N << 1 ]。 7 int型E、N、[N]、ヘッド[N]、X [N]、Y [N]。 8 ボイド追加(int型のx、int型のY){ 9 エッジ[E] .nex = 頭部[X]。 10 エッジ[E] .TO = Y。 11 頭[X] = E ++ 。 12 } 13 空隙 DFS(int型 K、int型SH){ 14 であれば([K]> = 0)を返します。 15 [k]は= SHと、 16 のために(int型!; I = - I =頭[k]を1 ; I =エッジ[I] .nex)DFS(エッジ[I] .TO、SH ^ 1 )。 17 } 18 INT メイン(){ 19 のscanf(" %d個"、&N) 20 のmemset(ヘッド、 - 1、はsizeof (ヘッド))。 21 のmemset( - 1、はsizeof (a)参照)。 22 のために(int型 i = 1 ; iが<= N; iが++ ){ 23 のscanf(" %d個の%dを"&X [i]は、&Y [I])。 24 追加(X [i]は、Y [I])。 25 追加(Y [i]は、X [I])。 26 追加(2 * I- 1、2 * I)。 27 追加(2 * I、2 * I- 1 )。 28 } 29 のための(int型 i = 1 ; iが<= 2 I ++; * N ) 30 であれば - ([I] == 1)DFS(I、0 ); 31 のためには、(int型 i = 1 ; iが<= N; iが++)のprintf(" %D%D \ n "、[X [I] + 1、+ [I]、Y [] 1 )。 32 }