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

版权声明:本文为博主原创文章,你若想转载请附上源博客地址。 https://blog.csdn.net/qq_24489717/article/details/51189432
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把我代码吞了。。。







阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页