Fzu2227
2016-04-16 17:03
260 查看
#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 , v , stk[N*2] , top ; std::vector<std::pair<int,int> > g ; 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; }
相关文章推荐
- Teleport Ultra/Teleport Pro的冗余代码批量清理方法
- clang 命令
- JQuery中一个简单的表单验证的实例
- MYSQL LOCK IN SHARE MODE&FOR UPDATE
- [转] Express 4 中的变化
- 【QT】:QT中的单选框和复选框的使用
- Volley框架的使用方法
- Spring MVC @Transactional注解方式事务失效的解决办法
- 单例模式
- uvalive4256
- 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改
- 5天不再惧怕多线程——第四天 信号量
- Objective-C 知识要点(术语表)
- 5天不再惧怕多线程——第三天 互斥体
- (有意思的东西)python面向对象----->类与实例强势解读
- 给定一个随机数范围,产生另一个随机数范围
- C++函数指针
- 在windows,如何实现fork()函数
- 5天不再惧怕多线程——第二天 锁机制
- 5天不再惧怕多线程——第二天 锁机制