FOJ有奖月赛-2016年4月(F)

Problem F 邮票

Accept: 113    Submit: 523
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem 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

21 100100 233 1100 23 2

 Sample Output

1 100 21 3 2 100



题解:从题目描述的可以得出解题的重要结论,这是一条链,没有其他的多余节点。我稍后解释。如下图


那么是如何得出这个结论呢?它保证是一个连通图,只有n-1条边,那么联通n个点的最少边是n-1,根据他是联通图有只有n-1条边,只会是上图的样子,那么问题就简单了,可以直接找到起点和终点,那个字典序小就从那个点输出,那么怎么找到起点呢?很明显他的出度是等于1的就是起点或者终点,直接压到vector里判断一下size==1?即可,这里问题又来了,他的点的编号大小最大是1e9,我们需要先离散化一下,在构图。这里我们直接DFS在图上跑就ok了


代码略。。。。。。。。。。。。。FZU OJ把我代码吞了。。。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值