poj2516-经典最小费用最大流-有点难度(二)

2014-11-24 09:18:27 · 作者: · 浏览: 1
));
memset(map, 0, sizeof(map));
for (i = 1; i <= N; ++ i)
{
for (j = 1; j <= M; ++ j)
{
scanf("%d", &map[j][M + i]);//将N个人映射到M+1-M+N区间上,这样方便建图,map j到M+i就是从地方j运送到人i的花费
map[M + i][j] = -map[j][M + i];
cap[j][M + i] = have[j][k];//j到i的量是第k种货物的在place j的最大的量
cap[M + i][j] = 0;
}
}
if (!flag)
{
continue;
}
for (i = 1; i <= M; ++ i)
{
cap[0][i] = have[i][k];//源点到place i其实也设为第k中货物在place i的量
map[0][i] = map[i][0] = 0;//从原点到i花费为0
}
for (i = 1; i <= N; ++ i)
{
cap[M + i][num] = need[i][k];//从人i到汇点的量设为第i个人对第k种货物的需求量。
map[M + i][num] = map[num][M + i] = 0;
}
while (spfa())//求第k种货物的最小花费
{
end();
}

}
if (flag)
{
printf("%d\n", ans);
}
else
printf("-1\n");
}
return 0;
}