有向无环图的最小路径覆盖nefu481

本文探讨了有向无环图(DAG)的最小路径覆盖问题,指出每个顶点可视为一条路径,并强调路径间不得相交。关键在于找到与其他顶点无边相连的点。通过减去二分图的最大匹配数,可求得最小路径覆盖数量。该方法涉及图论中的路径覆盖与二分图匹配理论。
摘要由CSDN通过智能技术生成

有向无环图的路径覆盖问题就是在图中找一些不相交的简单路径,使之覆盖图中的所有顶点,且任何一个顶点有且只有一条路径与之关联(如果沿这些路径中的每条路径从起点到终点,那么恰好可以经过图中每个顶点一次且仅一次)。

从上述定义中可以看到:

(1)每个单独的顶点都可以是一条路径。

(2)如果存在路径(p1,p2,,,,pk),那么在覆盖图中,顶点p1,p2,,,,pk,不再与其他的顶点之间存在有向边。

有向无环图的最小路径覆盖就是找出最小的路径条数,使这些路径成为原图的一个路径覆盖。

从以上分析中,我们可以利用第(2)条性质,在图中找出与其他顶点之间存在有向边的点,然后用总点数减去它就可以得到最小路径覆盖数。

即,最小路径覆盖的条数,就是原图顶点数,减去二分图最大匹配数。沿着匹配边查找,就是一个路径上的点,输出所有路径即可。

#include <iostream>
#include <cstdio>
using namespace std;
const int oo=1e9;
const int mm=1e5;
const int mn=555;
int node,src,dest,edge;
int ver[mm],next[mm],flow[mm];
int head[mn],work[mn],dis[mn],q[mn];
void prepare(int _node,int _src,int _dest)
{
    node=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值