CCF-CSP题解 201512-4 送货
求字典序最小欧拉路。
似乎不能用\(Fluery\)算法(\(O(E^2)\))。\(Fluery\)算法的思路是:延申的边尽可能不是除去已走过边的图的桥(割)。每走一步都要判断是否是割,应当会超时。
采用\(Hierholzer\)算法(\(O(V+E)\)),亦称逐步插入回路法。思路见代码。注意根据题意,每次选取未走过顶点最小的边延申。
注意题目要求从1号节点出发。
欧拉路存在的条件:
无向图:
存在欧拉回路的条件:原图连通,每个节点均为偶度节点。
存在欧拉通路的条件:存在欧拉回路,或原图连通,有两个节点为奇度节点,其他节点均为偶度节点。
有向图:
存在欧拉回路的条件:基图(有向边变成无向边)连通,每个节点的入度等于出度。
存在欧拉通路的条件:存在欧拉回路,或基图连通,有一个节点入度等于出度+1,有一个节点出度等于入度+1,其他节点入度等于出度。
#include<bits/stdc++.h>
const int maxn = 10000;
const int maxm = 100000;
using namespace std;
int to[maxm * 2 + 10];
int vis[maxm * 2 + 10];
int nex[maxm * 2 + 10];
int head[maxn + 10], cnt = 0;
void addEdge(int a, int b)
{
to[cnt] = b;
vis[cnt] = 0;
nex[cnt] = head[a];
head[a] = cnt++;
to[cnt] = a;
vis[cnt] = 0;
nex[cnt] = head[b];
head[b] = cnt++;
}
int degree[maxn + 10];
int vis1[maxn + 10], num = 0;
void dfs(int x)
{
vis1[x] = 1;
num++;
for (int i = head[x]; i != -1; i = nex[i])
{
int l = to[i];
if (!vis1[l])
dfs(l);
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
memset(head, -1, sizeof(head));
memset(degree, 0, sizeof(degree));
for (int i = 1, a, b; i <= m; i++)
{
scanf("%d%d", &a, &b);
addEdge(a, b);
degree[a]++;
degree[b]++;
}
memset(vis1, 0, sizeof(vis1));
dfs(1);
int odd = 0;
for (int i = 1; i <= n; i++)
{
if (degree[i] % 2)
odd++;
}
if (num == n && (odd == 0 || (odd == 2 && degree[1] % 2)))
{
stack<int> s1, s2;
s1.push(1);
while (!s1.empty())
{
int x = s1.top();
int y = -1, ii = -1;
for (int i = head[x]; i != -1; i = nex[i])
{
if (vis[i])
continue;
int l = to[i];
if (y == -1 || y > l)
y = l, ii = i;
}
if (y == -1)
{
s2.push(x);
s1.pop();
}
else
{
vis[ii] = vis[ii ^ 1] = 1;
s1.push(y);
}
}
bool first = true;
while (!s2.empty())
{
if (first)
{
printf("%d", s2.top());
s2.pop();
first = false;
}
else
{
printf(" %d", s2.top());
s2.pop();
}
}
printf("\n");
}
else
{
printf("-1\n");
}
return 0;
}
CCF-CSP题解 201512-4 送货的更多相关文章
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
- CCF CSP 201403-3 命令行选项
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...
- CCF CSP 201709-4 通信网络
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...
- CCF CSP 201409-3 字符串匹配
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...
- CCF CSP 201503-3 节日
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...
- CCF CSP 201509-2 日期计算
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-2 日期计算 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? ...
- CCF CSP 201604-2 俄罗斯方块
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...
- CCF CSP 201512-2 消除类游戏
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...
随机推荐
- iOS 抽奖轮盘效果实现思路
临近活动,相信不少app都会加一个新的需求——抽奖不多废话,先上GIF效果图 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:937194184,不管你是小白还是大牛欢 ...
- 新闻实时分析系统-Flume数据采集准备
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并 ...
- tar文件归档
tar是UNIX和类UNIX系统上的压缩,备份工具, 名字来源于Tape archive--磁盘归档,最初的时候是用来将数据储存,备份到磁带上的.而今最简单的备份方法是添加新的磁盘或者在云端存储,但即 ...
- Tab Bar Control 的封装和切换
见视频0414 思路: 1.删除系统自带的TabBar.2.添加UIView,做成自定义的TabBar,覆盖原来的TabBar.3.添加对于的button和切换事件.
- 2753:走迷宫(dfs+初剪)//可以说是很水了。。。
总时间限制: 1000ms 内存限制: 65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最少需要走多少步(数 ...
- Caused by: java.util.zip.ZipException: zip file is empty
1.问题描述:mybranch分支代码和master分支的代码一模一样,mybranch代码部署到服务器上没有任何问题,而master代码部署到服务器上运行不起来. 2.解决办法: (1)登陆服务器启 ...
- 【Android - 自定义View】之自定义颜色渐变的Tab导航栏
首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 GradientTab ,继承自View类: (2)这个自定义View实现了颜色渐变的Tab导航栏(仿微信主菜单),用户在左右滑 ...
- 英语口语考试资料College life
College life Early in senior high school, we longed to be enrolled in a university. Now the dream ha ...
- 关于jsp页面的复选框(checkbox)取值的获取问题
复选框的取值问题可以使用js和jQuery来获取: jQuery API : each(callback) :以每一个匹配的元素作为上下文来执行一个函数. :checked :匹配所有选中的被选中元素 ...
- Python文本转化语音模块大比拼,看看青铜与王者的差别!
文本转语音 如果把Python比喻成游戏中的一个英雄,你觉得它是谁?对于Dota老玩家来说,我会想到钢琴手卡尔!感觉Python和卡尔一样,除了生孩子什么都可以做的角色.日常生活中,我们会涉及到很多语 ...