hdu1151(最小路径覆盖)

来源:互联网 发布:betterzip mac注册码 编辑:程序博客网 时间:2024/06/06 08:56

求二分匹配最小路劲覆盖问题,最小路径覆盖=节点数-最大匹配数;

#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 1100int n,m;int used[N],link[N],mat[N][N];int dfs(int t){    int i;    for(i=1;i<=n;i++)    {        if(used[i]==0&&mat[t][i])        {            used[i]=1;            if(link[i]==-1||dfs(link[i]))            {                link[i]=t;                return 1;            }        }    }    return 0;}int main(){    int t,i,a,b;    scanf("%d",&t);    while(t--)    {        memset(link,-1,sizeof(link));        memset(mat,0,sizeof(mat));        scanf("%d%d",&n,&m);        for(i=1;i<=m;i++)        {            scanf("%d%d",&a,&b);            mat[a][b]=1;        }        int num=0;        for(i=1;i<=n;i++)        {            memset(used,0,sizeof(used));            if(dfs(i))                num++;        }        printf("%d\n",n-num);    }    return 0;}


0 0