题目大意:

给定n m 为图的点数和边数

接下来m行 u v 为u到v有一条边

要求最少几笔能画完图的所有边

输出每笔画过的路径编号 正数编号正向 负数编号反向

题解:https://www.cnblogs.com/xiuwenli/p/9372062.html

  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3. #define LL long long
  4. #define mem(i,j) memset(i,j,sizeof(i))
  5. using namespace std;
  6. const int N=1e5+;
  7. int n, m;
  8. struct EDGE {
  9. int to,nt; int id; bool f;
  10. }E[N<<];
  11. int head[N], tot;
  12. void addE(int u,int v,int id) {
  13. E[tot].f=; E[tot].to=v;
  14. E[tot].id=id; E[tot].nt=head[u];
  15. head[u]=tot++;
  16. }
  17. bool vis[N];
  18. int deg[N], cnt;
  19. vector <int> ans[N];
  20. void init() {
  21. tot=cnt=; mem(head,-);
  22. mem(deg,); mem(vis,);
  23. }
  24.  
  25. void dfs(int u) {
  26. vis[u]=;
  27. for(int i=head[u];~i;i=E[i].nt) {
  28. int v=E[i].to, id=E[i].id;
  29. if(!E[i].f) {
  30. E[i].f=E[i^].f=; // 这条边和对应的反向边标记
  31. dfs(v); // 一直搜到终点
  32. if(id) ans[cnt].push_back(-id); // 从终点开始反向记录路径 所以是-id
  33. else cnt++; // id为0说明遇到了手动加的边 就是新的一笔
  34. }
  35. }
  36. }
  37.  
  38. int main()
  39. {
  40. while(~scanf("%d%d",&n,&m)) {
  41. init();
  42. for(int i=;i<=m;i++) {
  43. int u,v; scanf("%d%d",&u,&v);
  44. deg[u]++, deg[v]++;
  45. addE(u,v,i); addE(v,u,-i);
  46. }
  47.  
  48. int u=;
  49. for(int i=;i<=n;i++)
  50. if(deg[i]&) { // 奇数度的点 两两连边
  51. if(u) addE(u,i,), addE(i,u,), u=;
  52. else u=i;
  53. }
  54.  
  55. for(int i=;i<=n;i++)
  56. if(!vis[i] && (deg[i]&)) { /// 先从奇数点开始搜
  57. cnt++; dfs(i); cnt--; // cnt记录的是之前的最后一条路
  58. }
  59. // 所以记录新的路应该cnt++先移到下一条路
  60. // 搜索过程中一直cnt++所以搜索结束后cnt是在下一条路
  61. // 此时将cnt置为最后一条路 应该cnt--
  62. for(int i=;i<=n;i++)
  63. if(!vis[i] && deg[i]) {
  64. cnt++; dfs(i);
  65. } // 此时还未走过的点都是偶数点 形成一个环 所以不需要cnt--
  66.  
  67. printf("%d\n",cnt);
  68. for(int i=;i<=cnt;i++) {
  69. int len=ans[i].size();
  70. printf("%d",len);
  71. for(int j=;j<len;j++)
  72. printf(" %d",ans[i][j]);
  73. printf("\n"); ans[i].clear();
  74. }
  75. }
  76.  
  77. return ;
  78. }

hdu6311 /// 欧拉路径 无向图最小路径覆盖 输出正反路径的更多相关文章

  1. 【wikioi】1904 最小路径覆盖问题(最大流+坑人的题+最小路径覆盖)

    http://wikioi.com/problem/1904/ 这题没看数据的话是一个大坑(我已报告官方修复了),答案只要求数量,不用打印路径...orz 最小路径覆盖=n-最大匹配,这个我在说二分图 ...

  2. Codevs 1904 最小路径覆盖问题

    1904 最小路径覆盖问题 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 给定有向图G=(V,E).设P 是G 的一个 ...

  3. 【PowerOJ1738】最小路径覆盖

    Description 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个 顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶 ...

  4. COGS728. [网络流24题] 最小路径覆盖问题

    算法实现题8-3 最小路径覆盖问题(习题8-13) ´问题描述: 给定有向图G=(V,E).设P是G的一个简单路(顶点不相交)的集合.如果V中每个顶点恰好在P的一条路上,则称P是G的一个路径覆盖.P中 ...

  5. Cogs 728. [网络流24题] 最小路径覆盖问题

    [网络流24题] 最小路径覆盖问题 ★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件 时间限制:1 s 内存限制:128 MB 算法实现题8-3 最小路径覆盖问题(习题8-1 ...

  6. cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法

    728. [网络流24题] 最小路径覆盖问题 ★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件时间限制:1 s   内存限制:128 MB 算法实现题8-3 最 ...

  7. 有向无环图(DAG)的最小路径覆盖(转)

    DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖. 最小不相交路径覆盖:每一条路径经过的顶点各不相同.如 ...

  8. (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)

    题意:     一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去 ...

  9. 有向无环图(DAG)的最小路径覆盖

    DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖. 最小不相交路径覆盖:每一条路径经过的顶点各不相同.如 ...

随机推荐

  1. Java异常处理教程

    异常是在没有定义正常执行路径时在Java程序的执行期间可能出现的条件.Java通过将执行操作的代码与处理错误的代码分离来处理错误. 当发生异常时,Java会创建一个包含有关异常的所有信息的对象,并将其 ...

  2. Win7下VS2008安装cocos2d-2.0-x-2.0.4模板时, 运行InstallWizardForVS2008.js文件执行失败的解决办法

         今天在Win7环境下的VS2008中安装cocos2d-x模板的过程中,当点击InstallWizardForVS2008.js时,弹出" 没有文件扩展'.js'的脚本引擎&q ...

  3. __init__ 和__new__的区别

    __init__和__new__的区别 __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值. __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例, ...

  4. fastjson转换包含date类型属性的对象时报错com.alibaba.fastjson.JSONException: For input string: "13:02:19"

    问题:time类型数据插入不进mysql数据库:调试的时候报如下错误: Caused by: java.lang.NumberFormatException: For input string: &q ...

  5. Install ncurses (ncurses-devel) and try again

    apt install libncurses5-dev libncursesw5-dev

  6. Bash: Removing leading zeroes from a variable

    old=" # sed removes leading zeroes from stdin new=$(echo $old | sed 's/^0*//')

  7. ie 图片拉伸

    终于发现只要设置img为 height:auto,width:auto,就不会出现这种情况了 img { height: auto; width: auto; }

  8. Java优化性能

    尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并 ...

  9. C中的lvalue和rvalue

    该贴子第一条回答虽然浅尝辄止,但还是很有参考价值. https://www.quora.com/What-is-lvalue-and-rvalue-in-C IBM一个简单的说法是: "-通 ...

  10. 张嘴高并发,闭口微服务,Docker不了解一下?

    Docker镜像与容器 理解虚拟化 计算机中,虚拟化是一种资源管理技术,打破计算机的内存.网络.硬盘等资源的不可切割的障碍,更好的进行的资源分配: 在实际生产环境中,虚拟化技术主要解决的是高性能的物理 ...