骑马修栅栏题解
来源:互联网 发布:mac pro13 retina壁纸 编辑:程序博客网 时间:2024/04/28 12:05
最近在luogu做了一道叫乌鸦坐飞机骑马修栅栏的题。
题目背景
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行,每行一个整数,依次表示路径经过的顶点号。注意数据可能有多组解,但是只有上面题目要求的那一组解是认为正确的。
输入输出样例
输入样例#1:
91 22 33 44 24 52 55 65 74 6
输出样例#1:
1234254657
欧拉回路板子+计数就可以了,数组记得开大点,听同学说开到1025就够了
#include<cstdio>#include<algorithm>using namespace std;int g[1501][1501],du[1501],cu[1501];//一开始数组开500WA了最后一个int n,e,ctp,i,j,x,y,st=1,m,mi,p;void f(int i){ for(int j=mi;j<=m;++j) if(g[i][j]) { g[i][j]--; g[j][i]--;//要计数的,可能两点之间很多条边; f(j); } cu[++ctp]=i;}//欧拉回路板子int main(){ scanf("%d",&e); for(i=1;i<=e;++i) { scanf("%d%d",&x,&y); ++g[y][x]; ++g[x][y]; du[x]++; du[y]++;//欧拉回路的统计环节 m=max(m,x); m=max(m,y); mi=min(mi,x); mi=min(mi,y);}//我怕数据不从1开始就统计了最大和最小QAQ,但貌似只需要统计最大值就好了 for(i=mi;i<=m;++i) if(du[i]%2) { st=i; break;}//找到最小的奇点就跳出循环并开始搜索 f(st); for(i=ctp;i>=1;--i)//记得反序输出 printf("%d\n",cu[i]); return 0;}
阅读全文
1 0
- 骑马修栅栏题解
- luoguP2731 骑马修栅栏 题解
- 骑马修栅栏
- 骑马修栅栏
- 骑马修栅栏
- CodeVS2019 骑马修栅栏
- 骑马修栅栏
- P2731 骑马修栅栏
- [P2731]骑马修栅栏
- 9018:骑马修栅栏
- 骑马修栅栏
- 1071: 骑马修栅栏
- usaco3.3.2 骑马修栅栏
- usaco 3.3 骑马修栅栏
- 骑马修栅栏(欧拉路)
- codevs 骑马修栅栏 2039
- 骑马修栅栏(标程)
- USACOTraining 3.3.1 Riding the Fences 骑马修栅栏 题解
- Region/Hfile/Datanode的关系和区分
- HTTP请求与响应-get和post
- Android 仿淘宝首页界面
- hdu 5705 Clock
- [PAT甲级]1002. A+B for Polynomials (25)(求两个多项式的和)
- 骑马修栅栏题解
- 机器学习概述
- linux初学者-CIFS网络文件系统篇
- C起源及C89/C99/C11标准
- 关于python请求url报HTTP Error 400: Bad Request
- Duan2baka的高精度模板!
- centos 安装 elasticsearch
- 前端性能优化总结
- 使用Python往Elasticsearch插入数…