「USACO」「LuoguP2731」 骑马修栅栏 Riding the Fences(欧拉路径
Description
Farmer John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。
John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马,在任意一个顶点结束。
每一个栅栏连接两个顶点,顶点用1到500标号(虽然有的农场并没有500个顶点)。一个顶点上可连接任意多(>=1)个栅栏。两顶点间可能有多个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。
你的程序必须输出骑马的路径(用路上依次经过的顶点号码表示)。我们如果把输出的路径看成是一个500进制的数,那么当存在多组解的情况下,输出500进制表示法中最小的一个 (也就是输出第一位较小的,如果还有多组解,输出第二位较小的,等等)。
输入数据保证至少有一个解。
Input
第1行: 一个整数F(1 <= F <= 1024),表示栅栏的数目
第2到F+1行: 每行两个整数i, j(1 <= i,j <= 500)表示这条栅栏连接i与j号顶点。
Output
输出应当有F+1行,每行一个整数,依次表示路径经过的顶点号。注意数据可能有多组解,但是只有上面题目要求的那一组解是认为正确的。
Sample Input
9
1 2
2 3
3 4
4 2
4 5
2 5
5 6
5 7
4 6
Sample Output
1
2
3
4
2
5
4
6
5
7
说明
题目翻译来自NOCOW。
USACO Training Section 3.3
题解
欧拉路径的模板题了吧
预备知识:
欧拉回路:从一个点可以遍历整张图,最后回到原来的点
欧拉通路:从一个点可以遍历整张图,最后回不到原来的点
对于无向图而言:(大前提:图联通
欧拉回路:任意点的度数为偶 起点可随意
欧拉通路:有且仅有两个点度数为奇 在遍历时一定要从一个为奇的点到另一个为奇的点
对于有向图:(还是大前提图联通
欧拉回路:每个点入度==出度
欧拉通路:有且仅有一个点出度-入度==1 为起点;有且仅有一个点入度-出度==1 为终点; 其余的点出度==入度
然后这道题的解法和算法学习都借鉴了排名第一的题解Misaka_Azusa的题解
所以是Hierholzers算法啦!
双向存边,记录每个点的度。
从小到大扫一遍 找有没有度数为奇的点 若有则break,从当前点开始dfs(欧拉通路
如果所有点度为偶则从最小的点开始dfs(欧拉回路
stack<int>st;
void dfs(int x)
{
for(int v=l;v<=r;++v)
if(tu[x][v])
{
tu[x][v]--;
tu[v][x]--;
dfs(v);
}
st.push(x);
return;
}
看代码然后强行理解应该就够了
然后对于stack 一开始自作聪明的成在开头直接输出QAQ
如果有一样的危险想法,讨论区给的这个样例还是蛮助于理解的
以下是全代码
#include<iostream>
#include<cstdio>
#include<stack>
#include<cmath>
using namespace std;
int du[];
int tu[][];
int l,r;
stack<int>st;
void dfs(int x)
{
for(int v=l;v<=r;++v)
if(tu[x][v])
{
tu[x][v]--;
tu[v][x]--;
dfs(v);
}
st.push(x);
return;
}
int main()
{
int f;
scanf("%d",&f);
l=,r=;
for(int i=;i<=f;++i)
{
int x,y;
scanf("%d%d",&x,&y);
tu[x][y]++;
tu[y][x]++;
du[x]++;
du[y]++;
l=min(l,x);
l=min(l,y);
r=max(r,x);
r=max(r,y);
}
int s=l;
for(int i=l;i<=r;++i)
if(du[i]%==){s=i;break;}
dfs(s);
while(!st.empty())
{
printf("%d\n",st.top());
st.pop();
}
return ;
}
YJQ说这是集训队算法(逃
「USACO」「LuoguP2731」 骑马修栅栏 Riding the Fences(欧拉路径的更多相关文章
- 洛谷P2731 骑马修栅栏 Riding the Fences
P2731 骑马修栅栏 Riding the Fences• o 119通过o 468提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题解 最新讨论 • 数据有问题题 ...
- 洛谷 P2731 骑马修栅栏 Riding the Fences 解题报告
P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...
- 洛谷 P2731 骑马修栅栏 Riding the Fences
P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...
- P2731 骑马修栅栏 Riding the Fences 题解(欧拉回路)
题目链接 P2731 骑马修栅栏 Riding the Fences 解题思路 存图+简单\(DFS\). 坑点在于两种不同的输出方式. #include<stdio.h> #define ...
- USACO Section 3.3 骑马修栅栏 Riding the Fences
题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...
- P2731 骑马修栅栏 Riding the Fences
题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次.John能从任何一个顶 ...
- 骑马修栅栏 Riding the Fences
题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...
- LG2731 骑马修栅栏 Riding the Fences
题意 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次.John能从任何一个顶点( ...
- [USACO]骑马修栅栏 Riding the Fences
题目链接 题目简述:欧拉回路,字典序最小.没什么好说的. 解题思路:插入边的时候,使用multiset来保证遍历出出答案的字典序最小. 算法模板:for(枚举边) 删边(无向图删两次) 遍历到那个点 ...
随机推荐
- T1046 旅行家的预算 codevs
http://codevs.cn/problem/1046/ 题目描述 Description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D ...
- ajax请求后台交互json示例
ajax请求,首先需要服务器(首先你需要node) npm i -g http-server 其次,进入当前目录(默认服务器端口8080) http-server 点击进入:localhost:808 ...
- UFLDL教程(一)---稀疏自编码器
神经网络模型 简单的神经网络 前向传播 代价函数 对于单个例子 .其代价函数为: 给定一个包括m个例子的数据集,我们能够定义总体代价函数为: 以上公式中的第一项 是一个均方差项. 第二项是一个规则化 ...
- 《Getting Started with WebRTC》第二章 WebRTC技术介绍
<Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念: . 怎样建立P2P的通信 . 有效的信 ...
- 《Deep Learning》全书已完稿_附全书电子版
Deep Learning第一篇书籍最终问世了.站点链接: http://www.deeplearningbook.org/ Bengio大神的<Deep Learning>全书电子版在百 ...
- java解析xml的方式DOM,SAX,DOM4J,JDOM,StAX
1)DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找 特定信息. ...
- zookeeper 服务端上下线,客户端感知
package pfs.y2017.m11.zookeeper.demo03; import java.util.ArrayList; import java.util.List; import or ...
- java:BufferedImage推断图像通道顺序并转RGB/BGR
一般来说java ImageIO处理读取图像时.通常是RGB或ARGB格式,可是有的时候.我们须要图像是BGR格式. 比方通过JNI将图像矩阵传递给动态库,动态库里用OpenCV来处理矩阵,而用Ope ...
- Codeforces Round #262 (Div. 2)460A. Vasya and Socks(简单数学题)
题目链接:http://codeforces.com/contest/460/problem/A A. Vasya and Socks time limit per test 1 second mem ...
- 高仿美团iOS版,版本5.7
高仿美团iOS版,版本:5.7 iOS技术交流群:112365317 github链接:https://github.com/lookingstars/meituan 假设你认为不错.欢迎star 哦 ...