DAG最小路径点覆盖
Problem
给出一个有向无环图 (\(DAG\)),求出最少使用其中多少条互不相交的路径覆盖所有点。
Solution
若有 \(n\) 个点,对于每个点 \(i\) ,我们将它拆成两个点 \(i\) 与 \(i'\),分别放在一个二分图的两侧,然后,对于有向图中的每条边 \((a,b)\) 我们在二分图中将 \((a,b')\) 这两个点连在一起。
当所有边在二分图中已经相应连好之后,我们跑二分图最大匹配,可以使用匈牙利,不过个人更倾向建立一个超级源点连向左侧每个点,建立一个超级汇点被右侧每个点所连,然后跑网络最大流。
假设最大流为 \(maxflow\) ,则最小路径覆盖数为 \(n-maxflow\) 。
Confirmation
由于要求选出的每条路径都要不相交,那么对于每条路径中的点,它的入度与出度均不会大于 \(1\) 。尤其对于每个起点,入度必定为 \(0\) ,每个终点出度必定为 \(0\) 。
那么由于 \(DAG\) 中的每条边都已经放到了二分图里,对于 \(DAG\) 最小路径选边的情况必定已经能够在二分图里选出来了。
接着我们考虑一下所要求的问题,显然一条路径只会有一个终点,且一个终点必定属于某条路径。而终点的出度又必定为 \(0\) 。那么这样对应的选边情况放到二分图里呢?我们就会发现:
- 对于一个点 \(i\) ,它指向 \(j\) 的出边必定在二分图上为 \((i,j')\)
- 对于一个点 \(i\) ,如果它的出度为 \(0\) ,那么二分图上的 \(i\) 必定不与任意一个 \(j'\) 所匹配。
- 选出的路径最少 \(\Leftrightarrow\) 终点最少 \(\Leftrightarrow\) 二分图左侧的未匹配点最少 \(\Leftrightarrow\) 二分图匹配数最大
那么根据以上证明,可以得出:最少路径= 最少终点 = 总点数-最大匹配数 = \(n-maxflow\) 。
证毕。
DAG最小路径点覆盖的更多相关文章
- uva1201 DAG 最小路径覆盖,转化为 二分图
大白例题P356 你在一座城市里负责一个大型活动的接待工作.你需要去送m个人从出发地到目的地,已知每个人的出发时间出发地点,和目的地点,你的任务是用尽量少的出租车送他们,使得每次出租车接客人,至少能提 ...
- 【LA3126 训练指南】出租车 【DAG最小路径覆盖】
题意 你在一座城市里负责一个大型活动的接待工作.明天将有m位客人从城市的不同的位置出发,到达他们各自的目的地.已知每个人的出发时间,出发地点和目的地.你的任务是用尽量少的出租车送他们,使得每次出租车接 ...
- 训练指南 UVALive - 3126(DAG最小路径覆盖)
layout: post title: 训练指南 UVALive - 3126(DAG最小路径覆盖) author: "luowentaoaa" catalog: true mat ...
- 1350 Taxi Cab Scheme DAG最小路径覆盖
对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...
- LUOGU P2764 最小路径覆盖问题 (最小路径点覆盖)
解题思路 有向图最小路径点覆盖问题,有这样的结论就是有向图最小路径点覆盖等于n-拆点二分图中最大匹配.具体怎么证明不太知道..输出方案时找到所有左部未匹配的点一直走$match$就行了. #incl ...
- POJ1422 Air Raid 【DAG最小路径覆盖】
Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6763 Accepted: 4034 Descript ...
- hdu3861 The King’s Problem 强连通缩点+DAG最小路径覆盖
对多校赛的题目,我深感无力.题目看不懂,英语是能懂的,题目具体的要求以及需要怎么做没有头绪.样例怎么来的都不明白.好吧,看题解吧. http://www.cnblogs.com/kane0526/ar ...
- HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
<题目链接> 题目大意: 一个有向图,让你按规则划分区域,要求划分的区域数最少. 规则如下:1.所有点只能属于一块区域:2,如果两点相互可达,则这两点必然要属于同一区域:3,区域内任意两点 ...
- bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 还以为是CDQ.发现自己不会三维以上的…… 第一问可以n^2.然后是求最长不下降子序列 ...
随机推荐
- sqoop使用经验总结及问题汇总
问题导读1.导入数据到HDFS,需要注意什么?2.在测试sqoop语句的时候,如何限制记录数量?3.sqoop导入时什么情况下会多导入一条数据? 一.sqoop 导入数据到HDFS注意事项 分割符的方 ...
- 复习loadRunner参数化
参数化: 为什么要用参数化? 如果是单一数据,那么会纯测试缓存. 如果是参数化,基本上大部分数据不会被缓存命中. 极端情况:所有的数据都不会被缓存命中,或者少量命中. 在loadrunner中,所有的 ...
- 线程安全的CopyOnWriteArrayList
证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的. ReadThread.java import java.util. ...
- getElementsByClassName方法的封装
Element.prototype.getElementsByClassName = function(searchClass,node,tag){ if(document.getElementsBy ...
- The Little Prince-12/07
The Little Prince-12/07 "My little man, where do you come from? What is this ‘where I live,‘ of ...
- 第二节 JavaScript基础
JavaScript组成及其兼容性: ECMAScript:解释器,翻译,用于实现机器语言和高级语言的翻译器:几乎没有兼容性问题 DOM(Document Object Model):文档对象模型,文 ...
- SSM思路大总结(部门信息的显示和增删改查)
#ssm整合(部门管理) ##1.新建工程 1.新建maven工程 2.添加web.xml 3.添加tomcat运行环境 4.添加依赖jar包 spring-webmvc mysql commonse ...
- Caused by: java.net.BindException: Address already in use: bind
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandService ...
- Linux学习笔记之Linux运行脚本时 $'\r' 错误
1.Windows上操作 用notepad++编译器打开脚本,编辑->文档格式转换->转换为UNIX格式,然后保存. 重新上传.运行,问题解决 2.Linux上操作 用vi/vim命令打开 ...
- android studio下载地址
AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/ 2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559 ...