为了使花费最小,所以要尽可能少的派机器人。
思路:刚开始以为是纯粹的DAG最小路径覆盖,WA 了
得用floyd传递闭包,把通路都连起来,因为机器人可以从一条路走到其它路上(有路的前提下)
然后就是求 最大匹配了
#include <stdio.h>
#include <string.h>
#define VM 505
int map[VM][VM],link[VM],vis[VM],XM[VM];
int n;
int DFS (int u)
{
<= n;v ++)
if (!vis[v]&&map[u][v])
{
vis[v] = 1;
if (link[v] == -1||DFS(link[v]))
{
link[v] = u;
XM[u] = v;
return 1;
}
}
0;
}
int hungary ()
{
0;
(link,-1,sizeof(link));
(XM,-1,sizeof(XM));
<= n;u ++)
if (XM[u] == -1)
{
memset (vis,0,sizeof(vis));
if (DFS(u))
res ++;
}
res;
}
int main ()
{
m,i,j,k,u,v;
("%d%d",&n,&m))
if (n == 0&&m == 0)
break;
memset (map,0,sizeof(map));
while (m --)
{