博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【FZU 2227 --- 邮票】DFS+离散化
阅读量:2038 次
发布时间:2019-04-28

本文共 1487 字,大约阅读时间需要 4 分钟。

【FZU 2227 --- 邮票】DFS+离散化

Description

一天Bob收到一封信。Bob知道瓦罗兰大陆的邮局从A城市送信到B城市,乐意使用从A城市到B城市的邮票(A, B),或者使用从B城市到A城市的邮票(A, B),但是由于瓦罗兰大陆的城市繁多,所以并不是所有城市之间都能直接发送接收信件,换句话说,某两个城市想要通行邮件必须经过其他城市才行,但是邮局发送一次邮件的路途中从不会通过一座城市两次。

现在在Bob的信封上有N个邮票,Bob想知道这封信件是如何周转到达他手中的。

Input

题目有多组数据。

每组数据第一行包含一个整数,N ( 2 <= N <= 1e5),代表信件上的N封邮票。

接下有N行数据。第 i 行数据包含两个整数 ui,vi,代表从城市ui发送到城市vi的邮票,ui代表城市的编号,每个城市的编号互不相同,(ui != vi ,1 <= ui, vi <= 1e9)。

输入数据保证有解。

Output

每组样例的结果输出为一行, 每行包括N+1个被空格隔开的整数,代表着信件依次经过的城市编号。

若有多组可行答案,输出字典序最小的那组答案。

Sample Input

2

1 100
100 2
3
3 1
100 2
3 2

Sample Output

1 100 2

1 3 2 100

解题思路:

读题后很容易想到DFS,但是数据量过大(1e9),数组存不下这么大的数据,所以我们先离散化,然后找个起点直接DFS就行。

AC代码:

#include 
#include
#include
#include
#include
using namespace std;#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define endl '\n'const int MAXN = 1e5+5;int ans[MAXN],num=0,n,cnt=0;vector
v[MAXN];map
m,ix,mp;bool vis[MAXN];void dfs(int x){ if(num==cnt) return; int len=v[x].size(); for(int i=0;i
> n) { for(int i=0;i<2*n;i++) v[i].clear(); m.clear(); ix.clear(); mp.clear(); memset(vis,false,sizeof(vis)); cnt=0;num=0; for(int i=0;i
> x >> y; if(!m[x]) ix[x]=cnt++,mp[ix[x]]=x; if(!m[y]) ix[y]=cnt++,mp[ix[y]]=y; v[ix[x]].push_back(ix[y]); v[ix[y]].push_back(ix[x]); m[x]++; m[y]++; } int st=0; for(map
::iterator it=m.begin();it!=m.end();it++) if((*it).second==1) { st=ix[(*it).first]; break; } vis[st]=true; ans[num++]=mp[st]; dfs(st); for(int i=0;i

转载地址:http://oiyof.baihongyu.com/

你可能感兴趣的文章
聊聊我对写好程序的认识
查看>>
OpenSSL源代码学习[转]
查看>>
插件原理2[转自CSDN]
查看>>
OpenCV Windows7 VC6.0安装以及HelloWorld
查看>>
python升级导致yum命令无法使用的解决办法
查看>>
vi/vim 中如何在每行行首或行尾插入指定字符串
查看>>
linux 查看端口被哪个程序占用
查看>>
socket
查看>>
Spring下载地址
查看>>
Linux日志2
查看>>
VS的路径变量[转]
查看>>
MFC消息处理[转]
查看>>
cookie被禁止后怎样使用session的解决方案
查看>>
Eclipse 部分快捷键失效解决
查看>>
Bootstrap 自定义弹框
查看>>
MyBatis 分页插件 PageHelper 使用方法
查看>>
AbstractQueuedSynchronizer 源码分析
查看>>
分布式以客户为中心的一致性
查看>>
java 注解
查看>>
CAS:乐观锁实现
查看>>