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的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖. 最小不相交路径覆盖:每一条路径经过的顶点各不相同.如 ...
随机推荐
- linux命令du
du log2012.log 查看文件大小 du -sh * 当前目录所有文件的大小 du|sort -nr|more 按照空间大小排序 du -c log30.tar.gz log31.tar. ...
- TOPO DN 解析
介绍 有一个算法,是将大量TOPO DN实例解析成结构形式.并依据DN获取对应的数据.本人感觉值得分享.并供大家讨论与优化. 注意:TOPO DN实例的顺序,是被我的其他算法预处理过的 ...
- window 下搭建流媒体服务器ffmpeg nginx-rmtp-module
媒体介绍和需要下载需要软件 1.FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp 2.ng ...
- Android 6.0 - 动态权限管理的解决方案(转)
转自:http://www.cnblogs.com/dubo-/p/6018262.html Android 6.0 - 动态权限管理的解决方案 转载请标注 Android 6.0版本(Api 2 ...
- property和attribute的区别---value
从网上看到很多写关于input的value属性,写的setAttribute可以影响DOM的property的value,在实践中我发现不同现象, 在页面初始化后,用setAttribute对valu ...
- vue撸的demo
之前做过一个layui+flask的测试平台,后来听说vue挺火,学了下,做个记录 一.想法 主要想开发几大功能,方便以后复用 1.工作中常常需要记录知识,所以我决定会做一个类似markdown笔记的 ...
- 非关系型数据库MongoDB入门
本文分为以下四块简单介绍非关系型数据库MongoDB:1.MongoDB简介.2.MongoDB和关系数据库对比.3.MongoDB基本概念.4.mongo shell的使用以及对MongoDB的增删 ...
- poj 2752 kmp的next数组
题目大意: 求一个字符串中某一个既是前缀又是后缀的前缀的结尾下标: 基本思路: 从_next[len]开始找_next[_next[len]],再找_next[_next[_next[len]]],一 ...
- hive之基本架构
什么是Hive hive是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员是用他们最为熟悉的SQL语言就可以进行海量的数据的处理.分析和统计工作,而不是必须掌握JAVA等变成语言和具备开 ...
- three.js低版本添加文字(如71版本)
研究了半天,最后终于加载成功了,记录一下three.js 71版本的文字加载,下面开始整个过程 首先,将ttf字体转换成js文件 源码版: https://github.com/gero3/facet ...