二分图最优匹配模板
2014-06-27 20:01
169 查看
const int MAX = 1e6+10;
const int inf = 0x3f3f3f3f;
int n,m;
int lx[MAX],ly[MAX];
int match[MAX];
int usex[MAX],usey[MAX];
int w[MAX][MAX];
int find(int u) {
usex[u]=1;
for(int i=0;i<m;i++) {
if(!usey[i]&&w[u][i]==ly[i]+lx[u]) {
usey[i]=1;
if(match[i]==-1||find(match[i])) {
match[i]=u;
return true;
}
}
}
return false;
}
void update() {
int d=inf;
for(int i=0;i<n;i++) if(usex[i]) {
for(int j=0;j<m;j++) if(!usey[j]) {
d=min(d,usex[i]+usey[j]-w[i][j]);
}
}
for(int i=0;i<n;i++) if(usex[i]) lx[i]-=d;
for(int i=0;i<m;i++) if(usey[i]) ly[i]+=d;
}
int kuhn () {
memset(match,-1,sizeof(match));
for(int i=0;i<n;i++) {
lx[i]=ly[i]=0;
for(int j=0;j<m;j++) {
lx[i]=max(lx[i],w[i][j]);
}
}
for(int i=0;i<n;i++) {
while(true) {
memset(usex,0,sizeof(usex));
memset(usey,0,sizeof(usey));
if(find(i)) break;
update();
}
}
}
我手敲的啊,正确性待验。
const int inf = 0x3f3f3f3f;
int n,m;
int lx[MAX],ly[MAX];
int match[MAX];
int usex[MAX],usey[MAX];
int w[MAX][MAX];
int find(int u) {
usex[u]=1;
for(int i=0;i<m;i++) {
if(!usey[i]&&w[u][i]==ly[i]+lx[u]) {
usey[i]=1;
if(match[i]==-1||find(match[i])) {
match[i]=u;
return true;
}
}
}
return false;
}
void update() {
int d=inf;
for(int i=0;i<n;i++) if(usex[i]) {
for(int j=0;j<m;j++) if(!usey[j]) {
d=min(d,usex[i]+usey[j]-w[i][j]);
}
}
for(int i=0;i<n;i++) if(usex[i]) lx[i]-=d;
for(int i=0;i<m;i++) if(usey[i]) ly[i]+=d;
}
int kuhn () {
memset(match,-1,sizeof(match));
for(int i=0;i<n;i++) {
lx[i]=ly[i]=0;
for(int j=0;j<m;j++) {
lx[i]=max(lx[i],w[i][j]);
}
}
for(int i=0;i<n;i++) {
while(true) {
memset(usex,0,sizeof(usex));
memset(usey,0,sizeof(usey));
if(find(i)) break;
update();
}
}
}
我手敲的啊,正确性待验。
相关文章推荐
- 二分图最优匹配 模板
- HDU 2255 奔小康赚大钱(二分图最优匹配:模板题)
- poj 2195 二分图最优匹配KM算法 模板题
- HDU 2255 奔小康赚大钱(二分图最优匹配:模板题)
- One fihgt one hdu 2813 map+二分图最优匹配+KM快速模板
- hdu2255 奔小康赚大钱,二分图最优匹配km模板
- 二分图最大匹配 匈牙利算法模板
- hdu 2255 奔小康赚大钱 (二分图最优匹配,KM算法)
- hdu1533 going home 二分图最优匹配
- 二分图最大匹配(模板+题目)
- HDU 3488 Tour(二分图最优匹配:有向环覆盖)
- Hopcroft-Karp算法模板(解决二分图最大匹配问题)
- 数据结构篇(二分图)最大匹配模板
- poj 2594(二分图最优匹配)
- 二分图的最优匹配(KM算法)
- HDU 3315 My Brute(二分图最优匹配:优先用原匹配边)
- hdu2255二分最优匹配KM标准模板
- HDU 2444 The Accomodation of Students(最大二分匹配(匈牙利算法)+二分图判断->模板题目)
- 二分图最大匹配模板
- SPOJ 4206 Fast Maximum Matching (二分图最大匹配 Hopcroft-Carp 算法 模板)