Fzu2227

来源:互联网 发布:食品销售进销存软件 编辑:程序博客网 时间:2024/05/28 15:47
#include <iostream>#include <string>#include <string.h>#include <vector>#include <stdio.h>#include <algorithm>#include <map>std::vector<int> num ;std::map<int , int> Id ;const int N = 100008 ;int u[N] , v[N] , stk[N*2] , top  ;std::vector<std::pair<int,int> > g[N] ;bool mark[N*2] ;void dfs(int now){     for(std::vector<std::pair<int,int> >::iterator it = g[now].begin() ; it != g[now].end() ; it++){         if (! mark[it->second]){            mark[it->second] = 1;            dfs(it->first);            stk[++top] = it->first ;         }     }}int deg[N*2] ;int main(){    int n ;    while(scanf("%d",&n) != EOF){        num.clear() ;        for(int i = 0 ;  i < n ; i++){            scanf("%d%d" , &u[i] , &v[i]) ;            num.push_back(u[i]) ;            num.push_back(v[i]) ;        }        std::sort(num.begin() , num.end()  ) ;        int m = std::unique(num.begin() , num.end()) - num.begin() ;        Id.clear() ;        for(int i = 0 ; i < m ; i++){            Id[num[i]] = i ;        }        std::fill(deg , deg+m , 0) ;        for(int i = 0 ; i < m ; i++) g[i].clear() ;        for(int i = 0 ; i < n ; i++){            int uu = Id[u[i]] ;            int vv = Id[v[i]] ;            g[uu].push_back(std::make_pair(vv,i) ) ;            g[vv].push_back(std::make_pair(uu,i) ) ;            deg[uu]++ ;            deg[vv]++ ;        }        int start = 0 ;        for(int i = 0 ; i < m ; i++){            if(deg[i] & 1){                start = i ;                break ;            }        }        for(int i = 0 ; i < m ; i++) std::sort(g[i].begin() , g[i].end()) ;        std::fill(mark , mark + m , 0) ;        top = 0 ;        dfs(start) ;        printf("%d" , num[start]) ;        for(int i = top ; i >=1  ; i--) printf(" %d" , num[stk[i]]) ;        puts("") ;    }    return 0;}

0 0
原创粉丝点击