HDU1151最小路径覆盖

来源:互联网 发布:软件对比ppt 编辑:程序博客网 时间:2024/05/17 03:03

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;}
0 0