博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mail Stamps CodeForces - 29C(离散化+dfs)
阅读量:4136 次
发布时间:2019-05-25

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

One day Bob got a letter in an envelope. Bob knows that when Berland’s post officers send a letter directly from city «A» to city «B», they stamp it with «A B», or «B A». Unfortunately, often it is impossible to send a letter directly from the city of the sender to the city of the receiver, that’s why the letter is sent via some intermediate cities. Post officers never send a letter in such a way that the route of this letter contains some city more than once. Bob is sure that the post officers stamp the letters accurately.

There are n stamps on the envelope of Bob’s letter. He understands that the possible routes of this letter are only two. But the stamps are numerous, and Bob can’t determine himself none of these routes. That’s why he asks you to help him. Find one of the possible routes of the letter.

Input

The first line contains integer n (1 ≤ n ≤ 105) — amount of mail stamps on the envelope. Then there follow n lines with two integers each — description of the stamps. Each stamp is described with indexes of the cities between which a letter is sent. The indexes of cities are integers from 1 to 109. Indexes of all the cities are different. Every time the letter is sent from one city to another, exactly one stamp is put on the envelope. It is guaranteed that the given stamps correspond to some valid route from some city to some other city.

Output

Output n + 1 numbers — indexes of cities in one of the two possible routes of the letter.

Examples

Input
2
1 100
100 2
Output
2 100 1
Input
3
3 1
100 2
3 2
Output
100 2 3 1
题意很简单,就是给你一张图,输出一条路径,里面包括所有的点一次且仅有一次。
点不是连续的,我们需要离散化一下。之后就dfs找路径就可以了。
代码如下:

#include
#define ll long longusing namespace std;const int maxx=2e5+100;struct node{
int x,y;}p[maxx];struct edge{
int to,next;}e[maxx<<1];int head[maxx<<1];int in[maxx];int vis[maxx],a[maxx];int n,tot,ans[maxx];/*-----------事前准备-----------*/inline void init(){
memset(head,-1,sizeof(head)); tot=0;}inline void add(int u,int v){
e[tot].to=v,e[tot].next=head[u],head[u]=tot++;}/*-----------dfs-----------*/inline void dfs(int u,int cnt){
vis[u]=1; for(int i=head[u];i!=-1;i=e[i].next) {
int to=e[i].to; if(vis[to]) continue;//走过的点不重复走。 ans[cnt]=a[to]; dfs(to,cnt+1); }}int main(){
int cnt=0,x,y; scanf("%d",&n);init(); for(int i=1;i<=n;i++) {
scanf("%d%d",&x,&y); p[i].x=x;p[i].y=y; a[++cnt]=x,a[++cnt]=y; } sort(a+1,a+1+cnt); int len=unique(a+1,a+1+cnt)-a-1; for(int i=1;i<=n;i++) {
p[i].x=lower_bound(a+1,a+1+len,p[i].x)-a; p[i].y=lower_bound(a+1,a+1+len,p[i].y)-a;//离散化之后连边 add(p[i].x,p[i].y); add(p[i].y,p[i].x); in[p[i].x]++;in[p[i].y]++; } int i; for(i=1;i<=len;i++) {
if(in[i]==1) break; } ans[1]=a[i]; dfs(i,2); for(int i=1;i<=len;i++) cout<
<<" "; cout<

努力加油a啊,(o)/~

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

你可能感兴趣的文章
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>