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

poj 2594 Treasure Exploration(f…

2018年03月17日 ⁄ 综合 ⁄ 共 887字 ⁄ 字号 评论关闭
题意:地球人要到火星去寻宝,派机器人去战,每个机器人能走多条路,在每个点进行寻宝
为了使花费最小,所以要尽可能少的派机器人。

思路:刚开始以为是纯粹的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)
{
    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;
               
XM[u] = v;
               
return 1;
           
}
       
}
    return
0;
}
int hungary ()
{
    int u,res =
0;
    memset
(link,-1,sizeof(link));
    memset
(XM,-1,sizeof(XM));
    for (u = 1;u
<= n;u ++)
       
if (XM[u] == -1)
       
{
           
memset (vis,0,sizeof(vis));
           
if (DFS(u))
               
res ++;
       
}
    return
res;
}
int main ()
{
    int
m,i,j,k,u,v;
    while (scanf
("%d%d",&n,&m))
    {
       
if (n == 0&&m == 0)
           
break;
       
memset (map,0,sizeof(map));
       
while (m --)
       
{
        

抱歉!评论已关闭.