现在的位置: 首页 > 综合 > 正文

poj 1422 Air Raid(匈牙利 DAC图最…

2018年03月17日 ⁄ 综合 ⁄ 共 838字 ⁄ 字号 评论关闭
题意:在一座城市里,有n条街道 都是单向的,每个街道有两个路口,街道不会形成回路 求最小伞兵数量,能访问所有路口

思路:DAC图的最小路径覆盖问题 = 顶点数-最大匹配;

#include <stdio.h>
#include <string.h>
#define M 150

int n,link[M],map[M][M],vis[M];

int DFS (int u)
{
    int v;
    for (v = 1;v
<= n;v ++)
    {
       
if (!vis[v]&&map[u][v])
       
{
           
vis[v] = 1;
           
if (link[v] == -1||DFS(link[v]))
           
{
               
link[v] = u;
               
return 1;
           
}
       
}
    }
    return
0;
}
int MaxMatch()
{
    int u,res =
0;
    memset
(link,-1,sizeof(link));
    for (u = 1;u
<= n;u ++)
    {
       
memset (vis,0,sizeof(vis));
       
if (DFS(u))
           
res ++;
    }
    return
res;
}
int main ()
{
    int
t,m,i,j;
    scanf
("%d",&t);
    while (t
--)
    {
       
scanf ("%d%d",&n,&m);
       
memset (map,0,sizeof(map));

       
while (m --)
       
{
           
scanf ("%d%d",&i,&j);
           
map[i][j] = 1;
       
}
       
int ans = n - MaxMatch();
       
printf ("%d\n",ans);
    }
    return
0;
}

抱歉!评论已关闭.