题目分析




来源:acwing

分析:
无向图判断是否有欧拉路径:连通;度数为奇数的点,要么有2个,要么有0个。

如果有解,直接dfs求欧拉路径即可:只要有相连的边,就dfs遍历。当然,这里需要输出字典序最小的欧拉路径,解决方法是dfs从小开始遍历,而且本题给定两点之间不存在重边,所以可以用set来存每个点的邻边,因为set是从小到大有序的,所有这样就可以轻松求出字典序最小的欧拉路径了。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N = 10010, M = 100010;
int n, m;
// 由于没有重边,用set来存图,否则可以用multiset
//
set<int> g[N];
int p[N];
int ans[M], top;int find(int x){if(x != p[x]) p[x] = find(p[x]);return p[x];
}void dfs(int u){// set是从小到大排序的,复杂度是logmwhile(g[u].size()){int t = *g[u].begin();g[u].erase(t), g[t].erase(u);dfs(t);}// 回溯的时候将点记录下来ans[ ++ top] = u;
}
int main(){cin >> n >> m;for(int i = 1 ;i <= n; i ++) p[i] = i;while( m --){int a, b;cin >> a >> b;g[a].insert(b), g[b].insert(a); // set的插入insertp[find(a)] = find(b);}int s = 0; // 统计度数为奇数的点的个数for(int i = 1; i <= n; i ++){if(find(i) != find(1)){puts("-1");return 0;}else if(g[i].size() & 1)  s ++;}if(s != 0 && s != 2 || s == 2 && g[1].size() % 2 == 0){puts("-1");return 0;}dfs(1);for(int i = top; i; i --) printf("%d ", ans[i]);}

题目链接

https://www.acwing.com/problem/content/3228/

CSP认证201512-4 送货[C++题解]:无向图欧拉路径、并查集、dfs相关推荐

  1. CSP认证201509-2 日期计算[C++题解]:枚举、模拟

    题目分析 来源:acwing 分析: 主要是判断2月多少天.然后就是遍历每个月,依次减去当前月的天数,发现days还剩多少天就是当月几号. 其实这里是背的模板,日期题模板更难一点的题目是 CSP认证 ...

  2. I - Ant Trip (无向图欧拉回路+并查集),判断

    I - Ant Trip 参考博客:Ant Trip(欧拉回路+并查集) 参考:欧拉路径问题与欧拉回路问题 题意:给你无向图的 N 个点和 M 条边,保证这 M 条边都不同且不会存在同一点的自环边,现 ...

  3. 加边的无向图(并查集)

    思路:加边个数等于连通块个数减一,因为是无向图可以用直接用并查集统计连通块个数. #include <cstdio> #include <cstring> #include & ...

  4. CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想

    题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...

  5. CSP认证201503-4 网络延时[C++题解]:树的直径

    题目分析 来源:acwing 分析: 树的直径的概念: 树上最远的两个节点之间的距离就被称为树的直径,连接这两点的路径被称为树的最长链. 类似于圆的直径的概念:圆上直线距离最远的两个点构成直径. 这是 ...

  6. CSP认证201803-3 URL映射[C++题解]:字符串处理、模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 整体思路是什么呢? 第一,将所有的规则存下来,包括路径和对应的内容. 第二,对于读入的每一个待处理的url,遍历所有的规则,验证是否 ...

  7. CSP认证201803-1 跳一跳[C++题解]: 模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 如果读入1,直接++:如果读入2,要根据前一次的值进行判断. 其实,这里是一个等差序列,公差是2.读入1时,等差数列清零:读入2时, ...

  8. CSP认证201809-2 买菜[C++题解]:区间覆盖、pair、交集长度、右端点的min-左端点的max

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于区间(a,b) 和(c,d) 怎么求交集的长度? 分两种情况: 一种是没有交集,a > d 或者 b < c,即一个 ...

  9. CSP认证201809-1 卖菜[C++题解]:遍历

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析 :直接遍历即可,需要注意的小问题,用去尾法取整,直接转换为int即可. ac代码 #include<bits/stdc++.h& ...

  10. CSP认证201712-4 行车路线[C++题解]:单源最短路变型、拆点、好题!

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 题目给定所有答案不超过1e6,其实也就保证了连续小路的长度不超过1000(1000的平方就是1e6).这样我们就可以在题目给定的条件 ...

最新文章

  1. AtomicLong与LongAdder执行效率对比
  2. COMBOBOX绑定DICTIONARY做为数据源
  3. comsol积分函数_如何在 COMSOL 软件中合并解
  4. Quartz 触发器(SimpleTriggerCronTrigger )配置说明 cronExpression表达式 转
  5. 【黑群晖】搭建共享存储云盘系统
  6. dnSpy 反编译exe
  7. Matlab计算轮廓内切圆
  8. Vue 集成 PDF.js 实现 PDF 预览和添加水印
  9. php工具箱下载安装方法
  10. 小确幸BBS论坛-1-前期准备
  11. 为网站配置免费的HTTPS证书 4-4
  12. 【关于QT QMediaPlayer 打包后不能播放声音(plugins文件问题引起)】
  13. 破茧成蝶——我的北大之路(文/贺舒婷)
  14. 酸菜鱼用什么鱼最好吃
  15. 蓝桥杯 ALGO-128 Cowboys
  16. 【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)
  17. USART发送与接收
  18. 大型互联网分层架构图
  19. 【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN
  20. 从魔术师到统计学家 2

热门文章

  1. 【BZOJ】 2463 [中山市选2009]谁能赢呢?(博弈论)
  2. Python实现ANSI文件转UTF-8
  3. 团队角色测试(结果分析已公布)
  4. flash的运算比较符
  5. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
  6. java获取服务器信息吗_java获取服务器一些信息的方法
  7. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第6章-一阶时滞多智能体系统分组一致性
  8. Android属性之build.prop生成过程分析
  9. 通过PSO实现不同函数的目标值计算和搜索
  10. 九、linux设备节点注册