题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6346
解题思路:
这题卡dfs的KM所以只能用纯N^3的bfs
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int N = 210;
int val[N][N];
int lx[N],ly[N];
int linky[N];
int pre[N];
bool vis[N];
bool visx[N],visy[N];
int slack[N];
int n;
void bfs(int k) {
int px, py = 0,yy = 0;
LL d;
memset(pre, 0, sizeof(pre));
memset(slack, inf, sizeof(slack));
linky[py]=k;
do {
px = linky[py],d = INF, vis[py] = 1;
for(int i = 1; i <= n; i++) {
if(!vis[i]) {
if(slack[i] > lx[px] + ly[i] - val[px][i])
slack[i] = lx[px] + ly[i] - val[px][i], pre[i] = py;