热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

CCF201512-4送货(欧拉路径+字典序最小)

问题描述试题编号:201512-4试题名称:送货时间限制:1.0s内存限制:256.0MB问题描述:问题描述为了增加公司收入,F公司新开设了物流业务。由于F公司在业
 问题描述
试题编号: 201512-4
试题名称: 送货
时间限制: 1.0s
内存限制: 256.0MB
问题描述: 问题描述  为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。
  任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。除开街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。
  小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。
输入格式  输入的第一行包含两个整数n, m,表示交叉路口的数量和街道的数量,交叉路口从1到n标号。
  接下来m行,每行两个整数a, b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有一条街道。
输出格式  如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数p1, p2, p3, ..., pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证p1最小,p1最小的前提下再保证p2最小,依此类推。
  如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。
样例输入4 5
1 2
1 3
1 4
2 4
3 4
样例输出1 2 4 1 3 4样例说明  城市的地图和小明的路径如下图所示。
样例输入4 6
1 2
1 3
1 4
2 4
3 4
2 3
样例输出-1样例说明  城市的地图如下图所示,不存在满足条件的路径。
评测用例规模与约定  前30%的评测用例满足:1 ≤ n ≤ 10, n-1 ≤ m ≤ 20。
  前50%的评测用例满足:1 ≤ n ≤ 100, n-1 ≤ m ≤ 10000。
  所有评测用例满足:1 ≤ n ≤ 10000,n-1 ≤ m ≤ 100000。


真不想吐槽CCF,样例不过交了都能100分,但还是花了好久使得能过所有样例欧拉回路变形,巧点在如何使得走的路径最小,焦淼的排序一下即可。代码如下:
#include 
#include
#include
#include
using namespace std;
#define maxn 200100
bool flag[10010][10010];
int n,m,tot,cnt;
int head[maxn];
int ans[10000000];
int degree[maxn];
struct Road
{
int u,v,next;
}edge[maxn];
struct node
{
int u,v,sum;
}road[maxn];
bool comp(node a,node b)
{
return a.sum>b.sum;
}
void build(int u,int v)
{
edge[tot].u=u;
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void dfs(int x)
{
int i;
for(i=head[x];i!=-1;i=edge[i].next)
{
int t1=edge[i].u,t2=edge[i].v;
if(flag[t1][t2]==0 && flag[t2][t1]==0)
{
flag[t1][t2]=1;
flag[t2][t1]=1;
dfs(t2);
}
}
ans[++cnt]=x;
return ;
}
bool check()
{
for(int i=0;i{
int t1=edge[i].u,t2=edge[i].v;
if(flag[t1][t2]==0 && flag[t2][t1]==0)
return 0;
}
return 1;
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
int tail=0;int num=0;
memset(head,-1,sizeof(head));
memset(degree,0,sizeof(degree));
memset(flag,0,sizeof(flag));
for(i=0;i{
int u,v;
scanf("%d%d",&u,&v);
road[tail].u=u;road[tail].v=v;
road[tail++].sum=u+v;
degree[u]++;
degree[v]++;
}
sort(road,road+tail,comp);
tot=0;cnt=0;
for(i=0;i{
build(road[i].u,road[i].v);
build(road[i].v,road[i].u);
}
for(i=1;i<=n;i++)
if(degree[i]%2==1)
num++;
if(!(num==0 || num==2))
{
printf("-1\n");
continue;
}
dfs(1);
if (!check())
{
cout <<"-1\n";
continue;
}
cout <for(i=cnt-1;i>0;i--)
cout <<" " <cout <}
return 0;
}


推荐阅读
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文介绍了新款奇骏的两个让人上瘾的功能,分别是智能互联系统和BOSE音响。通过对新款奇骏的配置和功能进行评测,探讨了这两个新增功能的使用体验和优势。此外,还介绍了新款奇骏的其他配置和改进,如增加的座椅和驾驶辅助系统,以及内饰的舒适性提升。对于喜欢音响的消费者来说,BOSE音响的升级也是一个亮点。最后,文章提到了BOSE音响的数字还原能力,以及7座版无法配备BOSE音响的原因。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • tableau 倒序都倒了_Tableau|可视化报表设计详细操作步骤
    承接上篇文章,本文主要讲可视化报表中常用图表的具体操作步骤,及搭建仪表盘的方法经验。Tableau的模块分为三个:图表、仪表盘、故事。在底 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 4554:[Tjoi2016&Heoi2016]游戏 ... [详细]
  • 策略游戏设计日记[一]
    前言:简单的取了畅销榜TOP100中主观认定的策略游戏,做一个小小的分类和概述,先写了率土之滨概述,后续看有时间再补其他吧。 ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
  • 电脑吃鸡按键详细_北通J1手游按键评测:一秒15发的“吃鸡”神器
    近年来,随着战术竞技手游的崛起,在大地图中搜集物资、模拟特种兵对抗等玩法深受玩家喜爱。然而受限于“吃鸡”对移动、视角与射击协同操作的较高要求࿰ ... [详细]
  • 当google在搜索上很成功,并购youtube、发布gmail、进入手机、一统地图的时候,我们说google真伟大。当苹果在mp3领域一骑绝尘,iphone秒杀诺基亚,ipad打倒了电子 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • 腾讯、阿里的城市大脑较量
    配图来自Canva2016年的一天,在江苏省无锡市的鸿山小镇,正在悄然进行着一场物联网、云计算等新兴科技应用的宏大计划,这就是国内智慧城市的第一个试点。4年后的今天,鸿山小镇已经 ... [详细]
author-avatar
姥姥的妹妹的儿子跟我没关系
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有