HDU1151最小路径覆盖

DAG图(无回路有向图)的最小路径覆盖
用尽量少的不相交简单路径覆盖有向无环图(DAG)的所有顶点,这就是DAG图的最小路径覆盖问题。

最小路径覆盖数 = 节点数- 最大匹配数

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int MAXN=200;
int linker[MAXN];
int g[MAXN][MAXN];
int used[MAXN];
int n;

int dfs(int u)
{
    for(int v=1;v<=n;v++)
    {
        if(g[u][v]&&!used[v])
        {
            used[v]=1;
            if(linker[v]==-1||dfs(linker[v]))
            {
                linker[v]=u;
                return 1;
            }
        }
    }
    return 0;
}

int hungary()
{
    int res=0;
    memset(linker,-1,sizeof(linker));
    for(int u=1;u<=n;u++)
    {
        memset(used,0,sizeof(used));
        if(dfs(u))
        res++;
    }
    return res;
}
int main()
{int t,k,a,b;
 cin>>t;
 while(t--)
 {
     memset(g,0,sizeof(g));
     cin>>n>>k;
     while(k--)
     {
         cin>>a>>b;
         g[a][b]=1;
     }
     cout<<n-hungary()<<endl;
 }
    return 0;
}
    原文作者:B树
    原文地址: https://blog.csdn.net/aonaigayiximasi/article/details/50877905
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注