给出一张DAG图,问最少加多少条有向边s.t.其强联通?

对于这个问题,可以简化成以下等价(证明略去)版本:

给出一张n个点的DAG图,图中的点出度(简称cd)或者入度(简称rd)为0,问最少加多少有向条边,s.t.其强联通?

定理1:对于一张n个点的DAG图,图中的点出度或者入度为0,最少只需要加n-1条有向边,就可以使其强联通。

·证明:初始状态下,加入第一条边,至多产生一个强联通分量,并且这个强联通分量中只包含两个点(证明略去)。为了最小化加入有向边的数目,之后加入的有向边,一定不在这个强联通分量内部(因为它不会使得强联通分量的大小增加)。而无论是从这个分量中的任意一点引出一条边,还是引入任意一条边到这个分量中的点,都相当于对这个分量中所有的点进行了操作。于是可以把这个强联通分量缩成一个点,图中点数减一,回到初始状态。不难发现,我们最少只需要加n-1条有向边,或者说至少需要加n-1条有向边,才可以让DAG图中只剩下一个点,这个点就是我们要的强联通分量的缩点。

根据定理1,答案的最小值为n-1。现在只要找到一种对于任意只存在cd=0或者rd=0的点的DAG图都可行的方法,s.t.加入n-1条有向边后整个图强联通,那么n-1就是最终的答案。

1.首先考虑cd=0的点和rd=0的点交集为空,即不存在孤立点。恰好,按照这样构造:假设rd=0的点有a个,cd=0的点有b个,加入a-1条有向边s.t.rd=0的点连成一条链,然后加入b-1条有向边s.t.cd=0的点连成一条链,最后加入一条从cd=0形成的链链尾指向rd=0的链链首的有向边即可(强连通性证明略去)。共添加了a-1+b-1+1=a+b-1=n-1条有向边。

2.接着考虑cd=0的点和rd=0的点交集不为空,即存在孤立点。假设孤立点个数为c。孤立点作为链首,加入c+a-1条边把孤立点和rd=0且cd!=0的点连成一条链,加入b-1条边把cd=0且rd!=0的点连成一条链,最后从cd=0且rd!=0的点链尾引一条有向边到孤立点和rd=0且cd!=0的点形成的链的链首即可。(强连通性证明略去)共添加了c+a-1+b-1+1=a+b+c-1=n-1条有向边。

还有一种极端情况,假设图中没有边存在,那么就需要加入n条边(相差的这1条边实际上由原图中的边代替了)

综上,对于任意一张存在边的DAG图,假设其rd=0或者cd=0的点有n个,则只需要加n-1条边就可使其强联通;对于没有边存在的DAG图,则需要加n条边。

原文地址:https://www.cnblogs.com/Golden-Elf/p/11869643.html

时间: 2024-10-13 08:37:02

给出一张DAG图,问最少加多少条有向边s.t.其强联通?的相关文章

HDU 2767--Proving Equivalences【scc缩点构图 && 求向图中最少增加多少条边才可以使新图强连通】

Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4129    Accepted Submission(s): 1466 Problem Description Consider the following exercise, found in a generic linear algebra

poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】

Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10141   Accepted: 5031 Description It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the r

POJ 1236--Network of Schools【scc缩点构图 && 求scc入度为0的个数 && 求最少加几条边使图变成强联通】

Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13325   Accepted: 5328 Description A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a li

hdoj 3836 Equivalent Sets【scc&&缩点】【求最少加多少条边使图强连通】

Equivalent Sets Time Limit: 12000/4000 MS (Java/Others)    Memory Limit: 104857/104857 K (Java/Others)Total Submission(s): 3568    Accepted Submission(s): 1235 Problem Description To prove two sets A and B are equivalent, we can first prove A is a su

【猜牌问题】甲乙都知道桌子的抽屉里有16张扑克牌: 红桃A、Q、4 黑桃J、8、4、2、7、3 草色K、Q、5、4、6 方块A、5 教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉甲,把这张牌的花色告诉乙。教授问:你们能推理出是什么牌吗? 甲:我不知道这张牌。 乙:我知道你不知道这张牌。 甲:现在我知道这张牌了。 乙:我也知道了。 请问:这张牌是什么牌?

甲乙都知道桌子的抽屉里有16张扑克牌: 红桃A.Q.4 黑桃J.8.4.2.7.3 草色K.Q.5.4.6 方块A.5 教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉甲,把这张牌的花色告诉乙.教授问:你们能推理出是什么牌吗? 甲:我不知道这张牌.乙:我知道你不知道这张牌.甲:现在我知道这张牌了.乙:我也知道了. 请问:这张牌是什么牌? 解: 教授告知甲点数,告知乙花色 人物 已知 未知 甲 A 红桃.方块 Q 红桃.草色 4 红桃.黑桃.草色 J 黑桃 8 黑桃 2 黑桃 7 黑桃 3 黑

Codeforces Round #455 (Div. 2) E. Coprocessor DAG图上dp

E. Coprocessor 题意:n 个任务,每个任务在 主 / 副 处理器上执行.每个任务可能依赖于其它的一些任务,副处理器每次可以处理多个任务.但如果一个任务要在副处理器上执行,那它所依赖的任务要么已执行完了,要么和它一起在这个副处理器上同时执行.问副处理器最少调用多少次. 直白一点讲,就是给出一个 DAG 图,n 个点, m 条边,每个点的权值为 0 或1 .操作:直接相互连通的权值为 1 的点可以一次处理掉. 问最少操作多少次. tags:因为是DAG 图,直接跑 dp dp[i] 表

POJ 1442 Air Raid(DAG图的最小路径覆盖)

题意: 有一个城镇,它的所有街道都是单行(即有向)的,并且每条街道都是和两个路口相连.同时已知街道不会形成回路. 可以在任意一个路口放置一个伞兵,这个伞兵会顺着街道走,依次经过若干个路口. 问最少需要投放几个伞兵,使得每个路口都被伞兵拜访过.并且要满足每个路口只能被一个伞兵拜访过. 思路: 裸DAG图的最小路径覆盖. DAG图的最小路径覆盖数 = 节点数 - 二分图最大匹配 代码: vector<int> graph[125]; int cx[125],cy[125]; bool bmask[

poj 2060 Taxi Cab Scheme(DAG图的最小路径覆盖)

题意: 出租车公司有M个订单. 订单格式:     hh:mm  a  b  c  d 含义:在hh:mm这个时刻客人将从(a,b)这个位置出发,他(她)要去(c,d)这个位置. 规定1:从(a,b)到(c,d)所花的时间为:abs(a-c)+abs(b-d). 规定2:一辆出租车如果要接单,必须在客人出发前1分钟(包括)以前接单. 问,最少派出多少辆出租车,可以完成所有任务. 思路: 把每一笔单看成一个点,如果完成第i个单后可以接到第j个单,则 i->j连上线. 则题为:求这个DAG图的最小路

我以为我学懂了数据结构,看到这张导图,我才发现我错了

一个人对人民的服务不一定要站在大会上讲演或是做什么惊天动地的大事业,随时随地,点点滴滴地把自己知道的想到的告诉人家,无形中就是替国家播种垦植. -- 傅雷 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路?????? ?下面的数据结构知识点都掌握了,那说明你复习的很不错了.图片看不清可以加我微信,给你私发pdf文件.(偷偷告诉你,微信搜索 龙跃十二 关注公众号,点击联系作者即可获