zoukankan      html  css  js  c++  java
  • jzoj 1319. 邮递员

    Description

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

    Input

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

    Output

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

    Sample Input

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

    Sample Output

    7
    1 2 4 5 1 3 6 1

    Hint

    【数据说明】
      对于30%的数据,有N<=20
      对于100%的数据,有N<=200;

    solution

    听了讲,说就是一个裸的欧拉回路,模板套了套就切了。

    code

    #include<cstdio>
    using namespace std;
    int n,m,w[210],d[1010],t[210][210],tot=0;
    
    inline int read()
    {
    	int x=0; char c=getchar();
    	while (c<'0' || c>'9') c=getchar();
    	while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    	return x;
    }
    
    void dfs(int x)
    {
    	for (int i=1;i<=n;i++)
    		if (t[x][i]) t[x][i]--,t[i][x]--,dfs(i);
    	d[++tot]=x;
    }
    
    int main()
    {
    	freopen("post.in","r",stdin);
    	freopen("post.out","w",stdout);
    	n=read(),m=read();
    	for (int i=1;i<=n;i++) w[i]=read();
    	for (int i=1,u,v;i<=m;i++)
    	{
    		u=read(),v=read();
    		t[u][v]++,t[v][u]++;
    	}
    	dfs(1);
    	printf("%d
    ",tot-1);
    	for (int i=tot;i>0;i--)
    		printf("%d ",d[i]);
    	return 0;
    }
    
    转载需注明出处。
  • 相关阅读:
    java 日期格式 毫秒 表示方法
    Java的框架是什么意思
    圣思源Java视频36节练习源码分享(自己的190+行代码对比老师的39行代码)
    预装win8的笔记本如何重装win7
    Word 2013 无法撤销操作的错误
    面试经验分享(跳槽季~~~❀)
    一些可能有点用处的C#开发经验
    电子设计解决方案透视
    突破限速
    当区块链遇上Rust
  • 原文地址:https://www.cnblogs.com/jz929/p/11817563.html
Copyright © 2011-2022 走看看