hdu6311 /// 欧拉路径 无向图最小路径覆盖 输出正反路径
题目大意:
给定n m 为图的点数和边数
接下来m行 u v 为u到v有一条边
要求最少几笔能画完图的所有边
输出每笔画过的路径编号 正数编号正向 负数编号反向
题解:https://www.cnblogs.com/xiuwenli/p/9372062.html
- #include <bits/stdc++.h>
- #define INF 0x3f3f3f3f
- #define LL long long
- #define mem(i,j) memset(i,j,sizeof(i))
- using namespace std;
- const int N=1e5+;
- int n, m;
- struct EDGE {
- int to,nt; int id; bool f;
- }E[N<<];
- int head[N], tot;
- void addE(int u,int v,int id) {
- E[tot].f=; E[tot].to=v;
- E[tot].id=id; E[tot].nt=head[u];
- head[u]=tot++;
- }
- bool vis[N];
- int deg[N], cnt;
- vector <int> ans[N];
- void init() {
- tot=cnt=; mem(head,-);
- mem(deg,); mem(vis,);
- }
- void dfs(int u) {
- vis[u]=;
- for(int i=head[u];~i;i=E[i].nt) {
- int v=E[i].to, id=E[i].id;
- if(!E[i].f) {
- E[i].f=E[i^].f=; // 这条边和对应的反向边标记
- dfs(v); // 一直搜到终点
- if(id) ans[cnt].push_back(-id); // 从终点开始反向记录路径 所以是-id
- else cnt++; // id为0说明遇到了手动加的边 就是新的一笔
- }
- }
- }
- int main()
- {
- while(~scanf("%d%d",&n,&m)) {
- init();
- for(int i=;i<=m;i++) {
- int u,v; scanf("%d%d",&u,&v);
- deg[u]++, deg[v]++;
- addE(u,v,i); addE(v,u,-i);
- }
- int u=;
- for(int i=;i<=n;i++)
- if(deg[i]&) { // 奇数度的点 两两连边
- if(u) addE(u,i,), addE(i,u,), u=;
- else u=i;
- }
- for(int i=;i<=n;i++)
- if(!vis[i] && (deg[i]&)) { /// 先从奇数点开始搜
- cnt++; dfs(i); cnt--; // cnt记录的是之前的最后一条路
- }
- // 所以记录新的路应该cnt++先移到下一条路
- // 搜索过程中一直cnt++所以搜索结束后cnt是在下一条路
- // 此时将cnt置为最后一条路 应该cnt--
- for(int i=;i<=n;i++)
- if(!vis[i] && deg[i]) {
- cnt++; dfs(i);
- } // 此时还未走过的点都是偶数点 形成一个环 所以不需要cnt--
- printf("%d\n",cnt);
- for(int i=;i<=cnt;i++) {
- int len=ans[i].size();
- printf("%d",len);
- for(int j=;j<len;j++)
- printf(" %d",ans[i][j]);
- printf("\n"); ans[i].clear();
- }
- }
- return ;
- }
hdu6311 /// 欧拉路径 无向图最小路径覆盖 输出正反路径的更多相关文章
- 【wikioi】1904 最小路径覆盖问题(最大流+坑人的题+最小路径覆盖)
http://wikioi.com/problem/1904/ 这题没看数据的话是一个大坑(我已报告官方修复了),答案只要求数量,不用打印路径...orz 最小路径覆盖=n-最大匹配,这个我在说二分图 ...
- Codevs 1904 最小路径覆盖问题
1904 最小路径覆盖问题 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 给定有向图G=(V,E).设P 是G 的一个 ...
- 【PowerOJ1738】最小路径覆盖
Description 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个 顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶 ...
- COGS728. [网络流24题] 最小路径覆盖问题
算法实现题8-3 最小路径覆盖问题(习题8-13) ´问题描述: 给定有向图G=(V,E).设P是G的一个简单路(顶点不相交)的集合.如果V中每个顶点恰好在P的一条路上,则称P是G的一个路径覆盖.P中 ...
- Cogs 728. [网络流24题] 最小路径覆盖问题
[网络流24题] 最小路径覆盖问题 ★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件 时间限制:1 s 内存限制:128 MB 算法实现题8-3 最小路径覆盖问题(习题8-1 ...
- cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法
728. [网络流24题] 最小路径覆盖问题 ★★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件时间限制:1 s 内存限制:128 MB 算法实现题8-3 最 ...
- 有向无环图(DAG)的最小路径覆盖(转)
DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖. 最小不相交路径覆盖:每一条路径经过的顶点各不相同.如 ...
- (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)
题意: 一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去 ...
- 有向无环图(DAG)的最小路径覆盖
DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖. 最小不相交路径覆盖:每一条路径经过的顶点各不相同.如 ...
随机推荐
- Java异常处理教程
异常是在没有定义正常执行路径时在Java程序的执行期间可能出现的条件.Java通过将执行操作的代码与处理错误的代码分离来处理错误. 当发生异常时,Java会创建一个包含有关异常的所有信息的对象,并将其 ...
- Win7下VS2008安装cocos2d-2.0-x-2.0.4模板时, 运行InstallWizardForVS2008.js文件执行失败的解决办法
今天在Win7环境下的VS2008中安装cocos2d-x模板的过程中,当点击InstallWizardForVS2008.js时,弹出" 没有文件扩展'.js'的脚本引擎&q ...
- __init__ 和__new__的区别
__init__和__new__的区别 __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值. __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例, ...
- fastjson转换包含date类型属性的对象时报错com.alibaba.fastjson.JSONException: For input string: "13:02:19"
问题:time类型数据插入不进mysql数据库:调试的时候报如下错误: Caused by: java.lang.NumberFormatException: For input string: &q ...
- Install ncurses (ncurses-devel) and try again
apt install libncurses5-dev libncursesw5-dev
- Bash: Removing leading zeroes from a variable
old=" # sed removes leading zeroes from stdin new=$(echo $old | sed 's/^0*//')
- ie 图片拉伸
终于发现只要设置img为 height:auto,width:auto,就不会出现这种情况了 img { height: auto; width: auto; }
- Java优化性能
尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并 ...
- C中的lvalue和rvalue
该贴子第一条回答虽然浅尝辄止,但还是很有参考价值. https://www.quora.com/What-is-lvalue-and-rvalue-in-C IBM一个简单的说法是: "-通 ...
- 张嘴高并发,闭口微服务,Docker不了解一下?
Docker镜像与容器 理解虚拟化 计算机中,虚拟化是一种资源管理技术,打破计算机的内存.网络.硬盘等资源的不可切割的障碍,更好的进行的资源分配: 在实际生产环境中,虚拟化技术主要解决的是高性能的物理 ...