Прямой порядок 2i-1 и 2i положения не являются идентичными, что эквивалентно 2n сторон, подвергают крашения двудольного графа (фиги некоторый нечетный этот цикл не существует).
Пусть задан п штуки отношения класса сторона, 2i. 1- и 2i стороны B сторона класса, путь должен быть найден AB поочередно (как А / В конце не должен быть А / В отправной точке), то кольцо обязательно равные количества в боковой и B стороны, то есть фрикционное кольцо.
1 #include <. Бит / STDC ++ H> 2 с использованием пространства имен STD; 3 #define N 200005 4 структура джи { 5 INT NEX, чтобы; 6 } край [N << 1 ]; 7 INT Е, п, а [N], глава [Н], х [N], у [Н]; 8 недействительными добавить ( INT х, INT у) { 9 ребро [Е] = .nex головы [х]; 10 ребро [Е] .to = у; 11 головки [х] = Е ++ ; 12 } 13 недействительного ДФС ( INT к,INT ш) { 14 , если ([к]> = 0 ) возврата ; 15 [к] = ш; 16 для ( INT I = глава [к]; я = - 1 ; г = ребро [I] .nex) ДФС (край [я] .to, ш ^ 1 ); 17 } 18 INT Основной () { 19 зсапЕ ( " % d " , & п); 20 MemSet (голова, - 1 , SizeOf (головка)); 21 MemSet (а, - 1 , SizeOf (а)); 22 для (Int я = 1 ; г <= п; я ++ ) { 23 Scanf ( " % D% D " , & х [г], & у [I]); 24 добавить (х [I], у [I]); 25 добавить (у [I], х [I]); 26 добавить ( 2 * i - 1 , 2 * я); 27 добавить ( 2 * я, 2 * i - 1 ); 28 } 29 для ( INT I = 1 ; г <= 2 * п; я ++ ) 30 , если (а [я] == - 1) ДФС (я, 0 ); 31 для ( INT I = 1 ; г <= п; я ++) Е ( " % d% d \ п " , а [х [I]] + 1 , а [у [I]] + 1 ); 32 }