题意:

给出mmm条边,求出一条欧拉路,起点任意,终点任意,每条边只经过一次。要求给出的欧拉路字典序最小。(1≤m≤1024,1≤n≤500)(1\leq m\leq 1024,1\leq n\leq 500)(1≤m≤1024,1≤n≤500)


思路:

先总结一下有向图、无向图求欧拉路与欧拉回路的性质
无向图:有且仅有两个点度数为奇数则有欧拉路,所有点度数均为偶数则有欧拉回路。
有向图:所有点入度=出度则有欧拉回路。有且仅有两个点入度不等于出度,且起点出度比入度大 111 ,终点入度比出度大 111 则有欧拉路。

算法 —— Hierholzer (解决无向图、有向图、欧拉路、欧拉回路问题)

选一个点xxx为起点,存在边 <x,yx,yx,y>,则删去边<x,yx,yx,y>,若为无向图还需删除<y,xy,xy,x>。若无边可走,则将xxx加入结果栈。最后输出结构栈即可。

回到此题,要求找到字典序最小的欧拉路。因此选择一个编号最小的奇数点进行递归,递归过程中优先走字典序更小的点,可以用multisetmultisetmultiset维护。


代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <set>
#include <stack>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 500+100;
const int M = 1e5+100;
const db EPS = 1e-9;
using namespace std;multiset<int> st[N];
stack<int> stk;
int m,deg[N];void dfs(int x){// LOG1("x",x);while(st[x].size()){int y = (*st[x].begin());st[x].erase(st[x].begin());st[y].erase(st[y].find(x));dfs(y);}stk.push(x);
}int main()
{   rep(i,0,500) st[i].clear();while(stk.size()) stk.pop();scanf("%d",&m);rep(i,1,m){int xx,yy; scanf("%d%d",&xx,&yy);st[xx].insert(yy);st[yy].insert(xx);deg[xx]++, deg[yy]++;}int x = -1;rep(i,0,500) if(deg[i]%2){x = i; break;}if(x == -1) x = 1;dfs(x);while(stk.size()){printf("%d\n",stk.top());stk.pop();}return 0;
}

【洛谷 P2731】骑马修栅栏【欧拉路与欧拉回路】相关推荐

  1. 洛谷 P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...

  2. 信息学奥赛一本通 1375:骑马修栅栏(fence) | 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences

    [题目链接] ybt 1375:骑马修栅栏(fence) 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences [题目考点] 1. 图论:欧拉回路 欧拉回路存在的条件: ...

  3. 【codevs2039】骑马修栅栏,欧拉回路

    2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description Farmer John每年有很多栅栏要 ...

  4. 2039 骑马修栅栏

    2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Farmer John每年有很多栅栏要修理. ...

  5. 骑马修栅栏(fence) 、铲雪车(snow)

    问题 K: 骑马修栅栏(fence) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其 ...

  6. hrbust 哈理工oj 1633 word!word!【欧拉路、欧拉回路的有向图判断】

      word!word! Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 58(20 users) Total Accepted: 25 ...

  7. 骑马修栅栏(信息学奥赛一本通-T1375)

    [题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  8. 一本通1375:骑马修栅栏(fence)

    [题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  9. wlacm 骑马修栅栏 (图的遍历)题解

    题目描述 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅栏网 ...

  10. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1124. 骑马修栅栏:欧拉路径、dfs

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 本题是无向图的欧拉路,要输出字典序最小的欧拉路. 如何输出字典序最小的路径? 从最小的点开始搜,这样得到的欧拉路是字典序最小的. 无 ...

最新文章

  1. appium 控件定位
  2. java解锁_Java 姿势解锁 —— Lists.transform
  3. POP3口令扫描案例
  4. 热像仪 二次开发 c++_一种全新的红外热像仪——“可编程红外热像仪”
  5. MySQL索引底层原理理解以及常见问题总结
  6. 从司法领域看阿里云产业AI策略:生态联盟,技术赋能
  7. 微信、支付宝否认提供「锁定 35 万人」数据;苹果押宝中国 5G 市场;TiDB 4.0.1 发布 | 极客头条...
  8. bzoj 4827 礼物
  9. 飞行管理计算机在ATA章节,民航ATA章节中英文对照.docx
  10. Shell日常巡检脚本大全
  11. iOS——应用内调用Face ID、Touch ID
  12. java整数类和自然数类的简单实现
  13. macbook air 卸载java,macbook air如何删除程序
  14. Ultimate Colour Control for mac(fcpx终极色彩控制插件)
  15. 【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
  16. c语言函数大全 pdf,C语言标准库函数大全.pdf
  17. B. Not Dividing(构造)
  18. 【计量经济学导论】12. 格兰杰因果关系检验
  19. 有一个美女程序媛是一种什么样的体验,分享一下她所推荐的学习资料给你
  20. java电影院购票系统总结_Java实现电影院订票系统代码

热门文章

  1. mac 下 word 2011 使用笔记
  2. Linux 建立ftp站点
  3. 计算机审计初级难度,到现在你还不知道注会各科通过率 就真的out啦
  4. JavaBean实现简单登录功能
  5. TCMPC进阶之路——accumulate函数应用
  6. Deepin在matlab的安装
  7. 诺基亚n1支持java功能_关于诺基亚N1你必须要了解这10个问题!
  8. 电脑用电量_为什么换了智能电表后,我家用电量一下子多了这么多呢?
  9. 【UVA10562】Undraw the Trees(括号表示法输出树+fegts读取)
  10. 写的函数符号表里没有_DATEDIF函数,看看你的Excel里有没有?