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.然后是求最长不下降子序列 ...
随机推荐
- Eclipse创建maven工程后没有build path解决方案
1.修改maven工程下的.project文件为如下内容 <?xml version="1.0" encoding="UTF-8"?> <pr ...
- rabbitmq和redis用作消息队列的区别
将redis发布订阅模式用做消息队列和rabbitmq的区别: 可靠性redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中:r ...
- 浅谈大数据与hadoop家族
按照时间的早晚从大数据出现之前的时代讲到现在.暂时按一个城市来比喻吧,反正Landscape的意思也大概是”风景“的意思. 早在大数据概念出现以前就存在了各种各样的关于数学.统计学.算法.编程语言的研 ...
- python字典的排序,按key排序和按value排序---sorted()
>>> d{'a': 5, 'c': 3, 'b': 4} >>> d.items()[('a', 5), ('c', 3), ('b', 4)] 字典的元素是成键 ...
- AURO OtoSys IM100 vs Lonsdor K518ISE: which better?
Comparison: AURO OtoSys IM100 and Lonsdor K518ISE It’s aimed to help make a purchase of decent auto ...
- Python进阶【第一篇】:Python简介
Python简介 1.Python的由来 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 2.C 和 Python.Ja ...
- 最简单的uwsgi+nginx配置多个django站点
1. nginx.conf http{ server { listen 80; server_name www.web1.com ....... location / { uwsgi_p ...
- Fiddler(三)Fiddler 报错creation of the root certificate was not successful
打开CMD,找到Fiddler所在目录,我这里是把汉化版的解压在了桌面,所以通过CMD进入桌面下的Fiddler文件夹. 执行命令 makecert.exe -r -ss my -n -h -cy a ...
- 02: docker高级篇
1.1 Docker Compose 1.Docker Compose 介绍 1. Compose是一个定义和管理多容器的工具,使用Python语言编写. 2. 使用Compose配置文件描述多个容器 ...
- django基础 -- 6. 多表操作
一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...