HDU 1151 Air Raid(最小路径覆盖)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151

题意:求有向图的最小路径覆盖。

思路:最小路径覆盖=|G|-二分图的最大匹配

 #include <stdio.h>

 #include <string.h>

 

 int mat[125][125],link[125],visit[124],n,m,C;

 

 int OK(int u)

 {

     int v;

 

     for(v=1;v<=n;v++) if(!visit[v]&&mat[u][v])

     {

         visit[v]=1;

         if(link[v]==-1||OK(link[v]))

         {

             link[v]=u;

             return 1;

         }

     }

     return 0;

 }

 

 void deal()

 {

     int i,ans=0;

     memset(link,-1,sizeof(link));

     for(i=1;i<=n;i++)

     {

         memset(visit,0,sizeof(visit));

         if(OK(i)) ans++;

     }

     printf("%d\n",n-ans);

 }

 

 int main()

 {

     for(scanf("%d",&C);C--;)

     {

         scanf("%d%d",&n,&m);

         int i,u,v;

         memset(mat,0,sizeof(mat));

         for(i=1;i<=m;i++) scanf("%d%d",&u,&v),mat[u][v]=1;

         deal();

     }

     return 0;

 }

  

你可能感兴趣的:(raid)