题目名称 509. 邮递员
输入输出 carrier.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarcqw 于2010-11-17加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:17, 提交:45, 通过率:37.78%
GravatarVacaTionGOD 100 0.003 s 0.33 MiB Pascal
GravatarMarvolo 100 0.003 s 4.13 MiB Pascal
GravatarDes. 100 0.004 s 0.32 MiB Pascal
GravatarFoolMike 100 0.004 s 0.33 MiB Pascal
GravatarFoolMike 100 0.004 s 0.45 MiB C
GravatarFoolMike 100 0.004 s 0.47 MiB C++
Gravatar甘罗 100 0.004 s 4.13 MiB Pascal
GravatarHale 100 0.006 s 3.33 MiB C++
Gravatarzeppoe 100 0.007 s 1.24 MiB C++
Gravatarmagic 100 0.008 s 0.27 MiB Pascal
本题关联比赛
20101117
关于 邮递员 的近10条评论(全部评论)
数组开小没一A,哭泣了
GravatarHale
2019-04-27 20:06 4楼
三种语言,一个代码。速度却不一样!
GravatarFoolMike
2016-02-02 13:49 3楼
神题啊~~~
Gravatar甘罗
2016-02-02 12:46 2楼
这题的描述。。
就是求欧拉回路
GravatarVacaTionGOD
2015-11-01 23:33 1楼

509. 邮递员

★   输入文件:carrier.in   输出文件:carrier.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】


邮局需要你来帮助他们为某个邮递员设计出一条能够穿过那遥远乡村的所有村子和小路至少一次的邮路(输入数据将会保证这么一条路是一定存在的)。
但是,每条路线都是有一个花费的。各个村子里的村民希望邮递员到达他们村子的时间越早越好。因此,各个村子里的人们采用了一些措施:假设第i号村子是邮递员在他的邮递路线上到达的第k个村子。如果k<=w( i ),那么这个村子的村民就会付给邮局w( i )-k欧元。当然,如果k>w(i),邮局也同意付k- w( i )欧元给这个村子,对某些村子重复经过要重复收费。此外,邮递员每经过一条小路,邮局也要付给邮递员1欧元作为补贴。
现在有n个村子,编号依次为1到n。邮局就位于1号村子,因此邮递员的传递路线从这里开始,也从这个村子结束。能够离开每个村子的路口的数目一定是2,4或者8。这里允许出现同样的村子间存在多条小路,或者某条小路构成了一个自环的情况。
你的任务是设计一个路线使得邮局赚的钱最多(或者说赔的钱最少。如果有多种最优解,输出字典序最小的。

【输入】


第一行:两个整数n,m,分别表示村子的数量和小路的数量。
接下来n行,每行一个整数:w(i)(1≤w(i)<1000)
接下来m行,每行两个整数u,v,表示这条小路连接的村子的编号。

【输出】


第一行:一个整数k,你的程序所设计的路径的长度
第二行:k+1个整数,v1,v2…vk+l,每个数之间用一个空格隔开,表示你设计的路径所经过的村子的编号,其中需要满足v1=vk+1=1

【输入样例】


carrier.in

6 7
1
7
4
10
20
5
2 4
1 5
2 1
4 5
3 6
1 6
1 3

【输出样例】


carrier.out

7
1 2 4 5 1 3 6 1

【提示】


对于30%的数据,有N<=20
对于100%的数据,有N<=200;
补充说明:邮递员每条路线都要去送信,并且每条线路只要送一次就可以了。