不懂欧拉回路概念的可以看看这篇

(3条消息) 欧拉回路总结 + 例题 铲雪车_wsh1931的博客-CSDN博客

给定一张图,请你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次。输入格式
第一行包含一个整数 t,t∈{1,2},如果 t=1,表示所给图为无向图,如果 t=2,表示所给图为有向图。第二行包含两个整数 n,m,表示图的结点数和边数。接下来 m 行中,第 i 行两个整数 vi,ui,表示第 i 条边(从 1 开始编号)。如果 t=1 则表示 vi 到 ui 有一条无向边。
如果 t=2 则表示 vi 到 ui 有一条有向边。
图中可能有重边也可能有自环。点的编号从 1 到 n。输出格式
如果无法一笔画出欧拉回路,则输出一行:NO。否则,输出一行:YES,接下来一行输出 任意一组 合法方案即可。如果 t=1,输出 m 个整数 p1,p2,…,pm。令 e=|pi|,那么 e 表示经过的第 i 条边的编号。如果 pi 为正数表示从 ve 走到 ue,否则表示从 ue 走到 ve。
如果 t=2,输出 m 个整数 p1,p2,…,pm。其中 pi 表示经过的第 i 条边的编号。
数据范围
1≤n≤105,
0≤m≤2×105
输入样例1:
1
3 3
1 2
2 3
1 3
输出样例1:
YES
1 2 -3
输入样例2:
2
5 6
2 3
2 5
3 4
1 2
4 2
5 1
输出样例2:
YES
4 1 3 5 2 6

典型的欧拉回路模板题:

#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;const int N = 100010, M = 400010;int cnt;
int n, m;
int type;
int ans[M / 2];
bool used[M];
int din[N], dout[N];
int h[N], e[M], ne[M], idx;void add(int a, int b)
{e[idx] = b;ne[idx] = h[a];h[a] = idx;idx ++ ;
}void dfs(int u)
{for (int &i = h[u]; i != -1; ){if (used[i])//若该边使用过{i = ne[i];//删除这条边continue;}used[i] = true;//标记这条边被使用过if (type == 1) used[i ^ 1] = true;//若为无向图,则要把他的反边标记int t;if (type == 1)//若为无向图{t = i / 2 + 1;//i这条边所对应的点t(邻接表以边0,1为一条无向边,边2,3为一条无向边,)if (i & 1) t = -t;}else t = i + 1;//若为有向图,i这条边所对应的边为i + 1因为我们存的边下标从0开始即初始时idx = 0;int j = e[i];//在递归之前删掉边,而不是将这两条写在for里i = ne[i];//若放在for则当它再次遍历到这个点的时候边i仍然还未被删去,所以会tledfs(j);ans[++ cnt] = t;//先遍历后存数,所以存的是边的倒叙}
}int main()
{cin >> type;cin >> n >> m;memset(h, -1, sizeof h);for (int i = 0; i < m; i ++ ){int a, b;scanf("%d %d", &a, &b);add(a, b);if (type == 1) add(b, a);din[b] ++ , dout[a] ++ ;}if (type == 1){for (int i = 1; i <= n; i ++ )//若是无向图欧拉回路每个点的度要为偶数if (din[i] + dout[i] & 1) {puts("NO");return 0;}}else{for (int i = 1; i <= n; i ++ )//若是有向图欧拉回路每个点入度要等于出度if (din[i] != dout[i]){puts("NO");return 0;}}for (int i = 1; i <= n; i ++ )if (h[i] != -1)//找到第一个存在边的点开始遍历{dfs(i);break;}if (cnt < m) //若遍历到的遍小于m条即不能遍历所有的边。即边不连通{puts("NO");return 0;}puts("YES");//排除了一切不可能即为正确答案for (int i = cnt; i ; i -- ) printf("%d ", ans[i]);//ans存的是边的倒序puts("");return 0;
}

信息学奥赛一本通 欧拉回路相关推荐

  1. 信息学奥赛一本通OJ勘误

    信息学奥赛一本通OJ 是面向信奥初学者的很好用的OJ,感谢网站作者的的耐心制作. 尽管如此,该网站还是有一些错误,在此指明.瑕不掩瑜,希望网站作者早日修正. 1198:逆波兰表达式 题目中概念错误,应 ...

  2. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  3. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  4. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  5. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  6. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC

    http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...

  9. 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂

    信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂 https://blog.csdn.net/mrcrack/article/details/82846727 快速幂取模算法如何实现? h ...

  10. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

最新文章

  1. R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析、用虚线标记进行数据填充的区域
  2. bash参数及运算练习
  3. Java-所有类型的Class对象
  4. android+使用bmob冲突,bmob开发android遇到的问题
  5. python内置方法怎么使用_python中的常用内置方法
  6. 一个程序员的爱情和他的小棉袄
  7. 刀塔霸业android如何更新_战斗麻将!V社自走棋《刀塔霸业》APP端上线了
  8. 程序员微信头像_哪些微信头像一看就是程序员?
  9. 123f是什么c语言,123RF博客
  10. 物联网服务器Domoticz自带的消息推送到QQ邮箱
  11. CSDN:LaTex数学公式编辑基础
  12. Pathon 连接数据库
  13. WIN32API串口接收数据简单测试
  14. python的学习记录
  15. 技术人在互联网如何变现
  16. 【独行秀才】macOS Monterey 12.2.1正式版(21D62)原版镜像
  17. 中国最低调的河,长约1000公里,却养育了上亿人口
  18. 国内外云主机,美国主机,香港主机,日本主机,韩国主机,选择使用与对比
  19. 关于淘宝 TOP 开发 使用的一些心得,问题不断更新中。。。
  20. 开源网安受邀参加2023澳门万讯论坛,引领软件安全领域国产化替代浪潮

热门文章

  1. 数据库字段数据(昵称)排序,规则: 数字英文字母汉字首字母 兼容简繁体排序
  2. python 去除文本空行
  3. 电脑软件推荐安装列表
  4. 三轴、六轴、九轴传感器
  5. 代数拓扑1|单纯同调
  6. STM32F7xx基于HAL库的USB_CDC接收数据的函数调用
  7. 自考计算机毕业论文范文,计算机信息论文范文 计算机信息类有关自考毕业论文范文5000字...
  8. 集成算法 | 随机森林回归模型
  9. 线性表的链式存储结构(完整代码(C语言)+运行实例)
  10. refreshToken的作用讨论及几点疑惑