Codeforces 1152E猫とフラッシュバックオイラーパス

猫とフラッシュバック

[I] - [i]をエッジとして、再び十分オイラー経路を求めて、B。

通信せずに図ことに留意されたいです。

#include <ビット/ STDC ++ H>
 の#define Fiの最初
 の#define SE第二
 の#define MK make_pair
 の#define PII対<整数、整数>
 使用して 名前空間STDを、

CONSTの INT N =(INT)2E5 + 7 

int型[N]、B [N]、度[N]、N。
int型HS [N]、hs_cnt。
BOOL 禁止[N]。
ベクター <PII> G [N]。
ベクトル < int型 > ANS; 

ボイド DFS(INT U){
     一方(G [U] .size()){
         int型 V =G [U] .back()SE。
        int型 ID = 。G [U] .back()Fiの; 
        G [U] .pop_back()。
        もし(!禁止[ID]){ 
            禁止[ID]は = 
            DFS(V); 
        } 
    } 
    ans.push_back(HS [U])。
} 

int型のmain(){ 
    scanf関数(" %のD "、&N)
    以下のためにint型私= 1 ; iがN <; Iは++ ){ 
        scanf関数(" %のD "、および[I])。
        HS [ ++ hs_cnt] = [I]。
    }
    以下のためにint型 i = 1 ; iがn <I ++は{)
        のscanf(" %dの"、&B [I])。
        HS [ ++ hs_cnt] =のB [i]は、
    } 
    ソート(HS + 1、HS + 1 + hs_cnt)。
    hs_cnt =ユニーク(HS + 1、HS + 1 + hs_cnt) - HS - 1 以下のためにint型 i = 1 ; iがn <; iは++ ){ 
        [i]は = LOWER_BOUND(HS + 1、HS + 1 + hs_cnt、[I]) -HS; 
        B [i]は = LOWER_BOUND(HS + 1、HS + 1 + hs_cnt、B [I]) - HS。
        DEG [I]] ++ ; 
        DEG [i]は、B [] ++ ; 
        G [I]一back(MK(I、B [I]))。
        G [B [I]一back(MK(I、[I]))。
    } 
    のためにint型 i = 1 ; iは<N; iは++ ){
         場合([I]> B [I]){ 
            プット(" -1 " )。
            リターン 0 ; 
        } 
    } 
    INT =である1、CNT = 0 以下のためにint型 I = 1 ; I <= hs_cnt; iは++ ){
         場合(DEG [I]&1 ){ 
            こと = I。
            CNT ++ ; 
        } 
    } 
    もし(!CNT = 0!&& CNT = 2)プット(" -1 " )。
    { 
        DFS(BE)。
        もし(!ans.size()= n)のリターン・プット(" -1 ")、0 ;
        以下のためのint型 I =(INT)ans.size() - 1 ; I> = 0 ; i-- ){ 
            のprintf(" %d個の%のC "、ANS [i]は、" \ n " [I == 0 ])。
        } 
    } 
    戻り 0 
} 

/ * 
* /

 

おすすめ

転載: www.cnblogs.com/CJLHY/p/11615194.html