HDU -1151 二分匹配与有向无环图不相交最小路径覆盖数
题意:
考虑一个小镇,那里的所有街道都是单向的,并且每条街道都从一个路口通往另一个路口。还众所周知,从一个十字路口开始,穿过城镇的街道,您将永远无法到达同一十字路口,即,城镇的街道没有环。
基于这些假设,您的任务是编写一个程序,以找到可以降落在城镇上的伞兵的最小数量,并以不止一个伞兵不交叉路口的方式(也就是说一个十字路口只能到达一次)访问该镇的所有十字路口。每个伞兵都会降落在一个十字路口,并可以沿着城镇街道访问其他十字路口。每个伞兵的起始十字路口都没有限制。
问你把所有十字路口都走一遍需要的最少伞兵数量
题解:
那么很显然像1->2->3->4这样的图,只需要一个机器人就可以了。我们这个时候可以利用拆点就是把{1}拆成两个点{1,1`},也相当于复制了一个1
本题可以不考虑为啥这一道题目是二分图路径覆盖,我们可以推出来。题目上面说士兵可以从一个城市走到另一个城市,一直到
不能走。那么可以说像1->2->3这一条路只需要一个士兵,这是因为1与2相连,2与3相连,所以用其他点减去有几条匹配边就是结果了(假设1,2和2,3是两条匹配边)
可是二分图上的匹配一个点只能用一次,那么我们就可以通过拆点来实现我们的方法
证明:

上图中,对应左边的DAG建立构造右边的二分图,可以找到二分图的一个最大匹配M:1-3',3-4',那么M中的这两条匹配边怎样对应DAG中的路径的边?
使二分图中一条边对应DAG中的一条有向边,1-3'对应DAG图中的有向边1->3,这样DAG中1就会有一个后继顶点(3会是1的唯一后继,因为二分图中一个顶点至多关联一条边!),
所以1不会成为DAG中一条路径中的结尾顶点,同样,3-4'对应DAG中3->4,3也不会成为结尾顶点,那么原图中总共4个顶点,减去2个有后继的顶点,就剩下没有后继的顶点,即DAG路径的结尾顶点,
而每个结尾顶点正好对应DAG中的一条路径,二分图中寻找最大匹配M,就是找到了对应DAG中的非路径结尾顶点的最大数目,那么DAG中顶点数-|M|就是DAG中结尾顶点的最小数目,即DAG的最小路径覆盖数.
本题目求的是“最小覆盖数”,而不是“最小覆盖”
上一个图的最小覆盖是3,(这里说的是原图)因为他只能找出来一条边,之后用4(总节点)-1(最大匹配)=3
代码:

1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<iostream>
5 #include<queue>
6 #include<vector>
7 using namespace std;
8 const int maxn=210;
9 vector<int>str[maxn];
10 int n,match[maxn],visit[maxn];
11 int dfs_solve(int x)
12 {
13 int len=str[x].size();
14 for(int i=0;i<len;++i)
15 {
16 int v=str[x][i];
17 if(!visit[v])
18 {
19 visit[v]=1;
20 if(match[v]==0 || dfs_solve(match[v]))
21 {
22 match[v]=x;
23 return 1;
24 }
25 }
26 }
27 return 0;
28 }
29 int main()
30 {
31 int t;
32 scanf("%d",&t);
33 while(t--)
34 {
35 scanf("%d",&n);
36 int m;
37 scanf("%d",&m);
38 while(m--)
39 {
40 int u,v;
41 scanf("%d%d",&u,&v);
42 str[u].push_back(v);
43 }
44 int sum=0;
45
46 memset(match,0,sizeof(match));
47 for(int i=1;i<=n;++i)
48 {
49 memset(visit,0,sizeof(visit));
50 sum+=dfs_solve(i);
51 }
52 //printf("%d\n",sum);
53 printf("%d\n",n-sum);
54 // printf("-------------\n");
55 // for(int i=1;i<=n;++i)
56 // {
57 // printf("%d %d\n",i,match[i]);
58 // }
59 // printf("---------------\n");
60 for(int i=1;i<=n;++i)
61 str[i].clear();
62 }
63 return 0;
64 }
HDU -1151 二分匹配与有向无环图不相交最小路径覆盖数的更多相关文章
- hdu - 1151 Air Raid(有向无环图的最小路径覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=1151 在一个城市里有n个地点和k条道路,道路都是单向的,并且不存在环.(DAG) 现在伞兵需要去n个地点视察,伞 ...
- POJ 3020:Antenna Placement(无向二分图的最小路径覆盖)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6334 Accepted: 3125 ...
- POJ 3020 Antenna Placement(无向二分图的最小路径覆盖)
( ̄▽ ̄)" //无向二分图的最小路径覆盖数=顶点总数-最大匹配数/2(最大匹配数=最小点覆盖数) //这里最大匹配数需要除以2,因为每两个相邻的*连一条边,即<u,v>和< ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- HDU 3249 Test for job (有向无环图上的最长路,DP)
解题思路: 求有向无环图上的最长路.简单的动态规划 #include <iostream> #include <cstring> #include <cstdlib ...
- Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配
/** 题目:Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配 链接:https://vjudge.net/proble ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图
一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...
- 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP
1804: 有向无环图 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 187 Solved: 80[Submit][Status][Web Board ...
随机推荐
- 立完flag,你可能需要对flag进行量化
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...
- http-请求和响应报文的构成
请求的构成: 1)请求方法URI协议/版本 2)请求头(Request Header) 3)请求正文 1)请求方法URI协议/版本 Request URL: http://localhost:8080 ...
- paramunittest参数化测试基础
samples: import paramunittestimport unittest@paramunittest.parametrized( (10,20), (30,40), # (100,20 ...
- spring cloud gateway 自定义GatewayFilterFactory
spring cloud gateway提供了很多内置的过滤器,那么因为需求的关系,需要自定义实现,并且要可配置,在一番折腾之后,总算是解决了,那么久记录下来 对于自定义的factory,我们可以选择 ...
- kubernets集群的安全防护(下)
一 集群角色以及集群角色绑定 1.1 前面我们提到过角色以及角色绑定,那么现在为什么会出现集群级别的角色以及角色绑定,作用有如下所示 我们如果需要在所有的命名的空间创建某个角色或者角色绑定的时候 ...
- CVE-2020-0796复现
今天整理资料时发现了之前存的一个cve漏洞复现过程,当时打算跟着复现来着,后来也没去复现,今天刚好有时间,所以来复现一下这个漏洞 漏洞讲解 https://www.freebuf.com/vuls/2 ...
- ts类与修饰符
最近在用egret做游戏,就接触到了ts,刚开始的时候觉得类挺难的,毕竟大多数的JavaScript工程师工作中不怎么需要用到这个,但是学起来就不愿意撒手了,真香! typescript其实是es6的 ...
- Springmvc中参数的绑定
.处理器适配器在执行Handler之前需要把http请求的key/value数据绑定到Handler方法形参数上. 1.默认支持的参数类型: HttpServletRequest,HttpServle ...
- IP2188中文资料书
IP2188 是一款集成 12 种.用于 USB 输出端口的快充协议 IC,支持 USB 端口充电协议.支持 11种快充协议,包括 USB TypeC PD2.0/PD3.0/PPS DFP,HVDC ...
- 一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队
一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队