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

★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件
时间限制:1 s   内存限制:128 MB

算法实现题8-3 最小路径覆盖问题(习题8-13)

´问题描述:

给定有向图G=(V,E)。设P是G的一个简单路(顶点不相交)的集合。如果V中每个
顶点恰好在P的一条路上,则称P是G的一个路径覆盖。P中路径可以从V的任何一个顶
点开始,长度也是任意的,特别地,可以为0。G的最小路径覆盖是G的所含路径条数最少
的路径覆盖。
设计一个有效算法求一个有向无环图G的最小路径覆盖。

提示:

设V={1,2,...  ,n},构造网络G1=(V1,E1)如下:

每条边的容量均为1。求网络G1的(x0,y0)最大流。

´编程任务:

对于给定的给定有向无环图G,编程找出G的一个最小路径覆盖。

´数据输入:

由文件input.txt提供输入数据。文件第1行有2个正整数n和m。n是给定有向无环图
G的顶点数,m是G的边数。接下来的m行,每行有2个正整数i 和j,表示一条有向边(i,j)。

´结果输出:

程序运行结束时,将最小路径覆盖输出到文件output.txt中。从第1行开始,每行输出

一条路径。文件的最后一行是最少路径数。

输入文件示例

input.txt 
11 12
1 2
1 3
1 4
2 5
3 6
4 7
5 8
6 9
7 10
8 11
9 11
10 11

输出文件示例

output.txt

1 4 7 10 11
2 5 8
3 6 9
3

讲解:

Coding!

发现自己还是太弱了

这样一道看起来比较简单的二分图最小路径覆盖问题都能出问题 唉

现在我们来讲一下这一道题的易错点

1.最小路径覆盖数是  节点数n  -   二分图的最大匹配数

2.这一道题让输出路径  那么这应该怎么办呢?

我想了一个办法是这个样子的

首先我们在累加那个ans的时候枚举节点跑匈牙利算法dfs的时候不是从小往大枚举的吗

也就是说那个hav数组 在正常的情况下是hav[后]=hav[前]  但是 如果是这个样子 我们不好输出路径 因为我比较想去从头(较小的)开始输出

那么我们再来看一个son数组 和hav数组正好是反过来的

同时我们再设一个in数组 来存储入度

所以经过了上面的处理

我们只需要枚举n个点 如果这个点的入度为0   那么我们就从这个点开始  顺着son往后跑 就能打印出该条路径啦

具体内容看代码理解咯(其实还是比较 简单的  我啰嗦了那么多   还是看代码比较清晰一点啦)

鸿篇巨制:

#include<bits/stdc++.h>
#define maxn 205
using namespace std;
int n,m;
int vis[maxn],hav[maxn],tim=;
vector<int> v[maxn];
int in[maxn];
int son[maxn];
bool Dfs(int x)
{
for(int i=;i<v[x].size();i++)
{
int y=v[x][i];
if(vis[y]!=tim)
{
vis[y]=tim;
if(!hav[y]||Dfs(hav[y]))
{
hav[y]=x;
son[x]=y;
in[y]++;
return true;
}
}
}
return false;
}
bool Printed[maxn];
void Print(int i)
{
int x=i;
while(x!=)
{
printf("%d ",x);
Printed[x]=true;
x=son[x];
}
putchar('\n');
}
int main()
{
freopen("path3.in","r",stdin);
freopen("path3.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
int ans=;
for(int i=;i<=n;i++)
{
tim++;
ans+=Dfs(i);
}
for(int i=;i<=n;i++)
if(in[i]==)
Print(i);
printf("%d\n",n-ans);
return ;
}

点个赞 加个关注再走呗

cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法的更多相关文章

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

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

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

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

  3. 网络流24题 最小路径覆盖(DCOJ8002)

    题目描述 给定有向图 G=(V,E) G = (V, E)G=(V,E).设 P PP 是 G GG 的一个简单路(顶点不相交)的集合.如果 V VV 中每个顶点恰好在 P PP 的一条路上,则称 P ...

  4. cogs 14. [网络流24题] 搭配飞行员 二分图最大匹配 匈牙利算法

    14. [网络流24题] 搭配飞行员 ★★   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]     飞行大队有 ...

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

    地址 这题有个转化,求最少的链覆盖→即求最少联通块. 设联通块个数$x$个,选的边数$y$,点数$n$个 那么有 $y=n-x$   即  $x=n-y$ 而n是不变的,目标就是在保证每个点入度.出度 ...

  6. [POJ2594] Treasure Exploration(最小路径覆盖-传递闭包 + 匈牙利算法)

    传送门 引子: 有一个问题,是对于一个图上的所有点,用不相交的路径把他们覆盖,使得每个点有且仅属于一条路径,且这个路径数量尽量小. 对于这个问题可以把直接有边相连的两点 x —> y,建一个二分 ...

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

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

  8. 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】

    P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...

  9. Cogs 461. [网络流24题] 餐巾(费用流)

    [网络流24题] 餐巾 ★★★ 输入文件:napkin.in 输出文件:napkin.out 简单对比 时间限制:5 s 内存限制:128 MB [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块 ...

随机推荐

  1. H3C 通配符掩码的应用示例

  2. H3C 其他OSPF显示命令

  3. antd Bug记录

    antd-mobile Carousel 走马灯竖向滚动内容为空会导致visibility:hidden; Carousel Banner轮播组件初始化加载高度不正确可以在第一张图片onload事件的 ...

  4. Javascript中数组方法reduce的妙用之处

    Javascript数组方法中,相比map.filter.forEach等常用的迭代方法,reduce常常被我们所忽略,今天一起来探究一下reduce在我们实战开发当中,能有哪些妙用之处,下面从red ...

  5. Jquery Validate表单验证,动态添加和删除验证规则

    最近一直在忙着维护Jquery的商城,用到了Validate的表单验证,觉得很有意思,就纪录一下. // 动态添加验证规则 $("#invoice_send_region_id") ...

  6. 【35.53%】【POJ 2912】Rochambeau

    Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2837 Accepted: 1008 Description N childre ...

  7. codeforces 1194F (组合数学)

    Codeforces 11194F (组合数学) 传送门:https://codeforces.com/contest/1194/problem/F 题意: 你有n个事件,你需要按照1~n的顺序完成这 ...

  8. C++重载、覆盖与隐藏——转载

    http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html 成员函数的重载.覆盖与隐藏成员函数的重载.覆盖(override)与隐藏很容易混 ...

  9. Python学习(二)语言基础

    一.变量与类型 在程序设计中,变量是一种存储数据的载体 整型:Python中可以处理任意大小的整数 浮点型:浮点数也就是小数 字符串型:字符串是以单引号或双引号括起来的任意文本 布尔型:布尔值只有Tr ...

  10. cocos2dx 仿射变换

    AffineTransform __CCAffineTransformMake(float a, float b, float c, float d, float tx, float ty) { Af ...