codevs 2039 骑马修栅栏 USACO x
Farmer John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。
John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马,在任意一个顶点结束。
每一个栅栏连接两个顶点,顶点用1到500标号(虽然有的农场并没有500个顶点)。一个顶点上可连接任意多(>=1)个栅栏。两顶点间可能有多个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。
你的程序必须输出骑马的路径(用路上依次经过的顶点号码表示)。我们如果把输出的路径看成是一个500进制的数,那么当存在多组解的情况下,输出500进制表示法中最小的一个 (也就是输出第一个数较小的,如果还有多组解,输出第二个数较小的,等等)。
输入数据保证至少有一个解。
第1行: 一个整数F(1 <= F <= 1024),表示栅栏的数目
第2到F+1行: 每行两个整数i, j(1 <= i,j <= 500)表示这条栅栏连接i与j号顶点。
输出应当有F+1行,每行一个整数,依次表示路径经过的顶点号。注意数据可能有多组解,但是只有上面题目要求的那一组解是认为正确的。
- 9
- 1 2
- 2 3
- 3 4
- 4 2
- 4 5
- 2 5
- 5 6
- 5 7
- 4 6
- 1
- 2
- 3
- 4
- 2
- 5
- 4
- 6
- 5
- 7
见描述
思路:
1.一笔画问题的升级版
2.搜索的时候一定要从有边的最小值开始
3.范围一定是到最大的数而不是到n
4.数据有相同的情况,所以不能简单的把map置1
5.输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!
坑点:
在用nows的时候,要先将初始化为1,然后再用然后再++,以此类推.如果不这样,会全WA
我真不知道为什么...
Eg:nows=0,用时ans[++nows]=now;会WAWAWAWAWA
然后如果nows=1,用时ans[nows]=now,nows++;会AC
(以下为6.24记)
- 编表的num从0开始++,跟从1开始++的区别
- 如果从0开始编号,在往上反的过程中会用到0(因为0的编号是0(为假)嘛),所以要将head数组手动设置为-1才能进入0号元素那条边,如果不设置为-,只能用1往后的边
- 所以
- (Ps:now初始值为0)
- void add(int pre,int to)
- {
- h[now].to=to;
- h[now].next=heads[pre];
- heads[pre]=now++;
- /*
- 前提是heads数组已经设置为-1,并且在使用的时候
- for(int j=heads[i];j!=-1;j=h[j].next)
- 或者
- //for(int j=heads[i];~j;j=h[j].next)
- ~表示取反.
- */
- }
- 而如果这样的话
- void add(int pre,int to)
- {
- h[++now].to=to;
- h[now].next=heads[pre];
- heads[pre]=now;
- /*
- 从一开始编号的话,到0就停止,所以不需要手动设置为-1
- */
- }
- (额...学姐说的%%%)
代码:
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- using namespace std;
- const int M = ;
- int f,nows=,Ms;
- int map[M][M],cishu[];
- int ans[M];
- void dfs(int now)
- {
- for(int i=;i<=Ms;i++)
- {
- if(map[now][i]>)
- {
- map[now][i]--;
- map[i][now]--;
- dfs(i);
- }
- }
- ans[nows]=now;
- nows++;
- }
- int main()
- {
- scanf("%d",&f);
- int x,y;
- for(int i=;i<=f;i++)
- {
- scanf("%d%d",&x,&y);
- map[x][y]++;
- map[y][x]++;
- cishu[x]++;
- cishu[y]++;
- Ms=max(Ms,max(x,y));
- }
- int flag=;
- for(int i=;i<=Ms;i++)
- {
- if(cishu[i]%==)
- {
- flag=i;
- break;
- }
- }
- if(flag==)
- {
- for(int i=;i<=Ms;i++)
- {
- if(cishu[i]>)
- flag=i;
- break;
- }
- }
- dfs(flag);
- for(int i=nows-;i>=;i--)
- cout<<ans[i]<<endl;
- return ;
- }
codevs 2039 骑马修栅栏 USACO x的更多相关文章
- [USACO 3.3.1]骑马修栅栏t
[USACO 3.3.1]骑马修栅栏 时间限制: 1 Sec 内存限制: 64 MB提交: 39 解决: 17[提交][状态][讨论版] 题目描述 农民John每年有很多栅栏要修理.他总是骑着马穿 ...
- codevs 水过 骑马修栅栏
[问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...
- 洛谷P2731 骑马修栅栏 Riding the Fences
P2731 骑马修栅栏 Riding the Fences• o 119通过o 468提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题解 最新讨论 • 数据有问题题 ...
- 洛谷P2731 骑马修栅栏 [欧拉回路]
题目传送门 骑马修栅栏 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经 ...
- 欧拉路小结 JZYZOJ1210 骑马修栅栏
现在写到欧拉路,理解起来并不算特别困难...吧... 但是非常恶心的是每次都要调试半天,做不到一遍两遍就能ac 每次写程序都对于程序的整体构架没有清晰的思路,想到哪里写到哪里真的是个非常差的习惯[尽管 ...
- 洛谷 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」「LuoguP2731」 骑马修栅栏 Riding the Fences(欧拉路径
Description Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编 ...
随机推荐
- Lesson 1 A puma at large
spot (v) 看出,发现 oblige (v) 使...感到必须:obliged (adj)必须的, feel obliged to do sth. 感到不得不做某事 ==have to.eg:E ...
- OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】
[Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...
- <<用法
数据移位运算符,左移几位,如:x=i<<4;就是将i的值左移4位(放大2的4次方)后,赋给x,若i=2,则X=32.
- ant buid.xml 模板
<?xml version="1.0" encoding="UTF-8"?> <project name="ant" de ...
- [转帖]又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控
又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控 https://www.cnbeta.com/articles/tech/850525.htm 不知道是不是有一起汉芯事件 国产CP ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 最长上升子序列(LIS) Medium1
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...
- PHP实现支付宝小程序用户授权的工具类
背景 最近项目需要上线支付宝小程序,同时需要走用户的授权流程完成用户信息的存储,以前做过微信小程序的开发,本以为实现授权的过程是很简单的事情,但是再实现的过程中还是遇到了不少的坑,因此记录一下实现的过 ...
- C#多线程下更新UI的几种方法
1. 使用UI线程的SynchronizationContext的Post/Send方法,这种情况一般在窗体构造函数或者FormLoad中获取同步上下文: 范例: public partial cla ...
- 两个 DataTable 读取重复数据,dataTable1与dataTable2不同
protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Ad ...