KM(n^4)模板
来源:互联网 发布:打车软件有几种 编辑:程序博客网 时间:2024/06/06 02:19
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int inf=10000000;int lx[301],ly[301];int a[301][301],vx[301],vy[301];int n;int match[301];int MAX(int x,int y){ return x>y?x:y;}int MIN(int x,int y){ return x<y?x:y;}int dfs(int x){ int i,j,k,m;vx[x]=1; for(i=1;i<=n;i++) if(!vy[i] && lx[x]+ly[i]==a[x][i]){ vy[i]=1; if(!match[i] || dfs(match[i])){ match[i]=x; return 1; } } return 0; } int main(){int i,j,k,m;cin>>n;int max=0;for(i=1;i<=n;i++){max=0; for(j=1;j<=n;j++){ cin>>a[i][j]; max=MAX(max,a[i][j]);} lx[i]=max;}for(k=1;k<=n;k++){ while(1){ for(i=1;i<=n;i++){ vx[i]=0; vy[i]=0;} if(dfs(k))break; int min=inf; for(i=1;i<=n;i++) if(vx[i]) for(j=1;j<=n;j++) if(!vy[i]) min=MAX(min,(lx[i]+ly[j]-a[i][j])); if(min==inf){ cout<<"-1"<<endl; return 0;}for(i=1;i<=n;i++) if(vx[i])lx[i]-=min; for(i=1;i<=n;i++) if(vy[i])ly[i]+=min;}}int ans=0;for(i=1;i<=n;i++)ans+=a[match[i]][i];cout<<ans<<endl;return 0;}
1 0
- KM(n^4)模板
- KM(n^4)模板
- KM(n^4)模板
- KM(n^3)模板
- KM(N^3)模板(HDU2255)
- KM(N^3)模板(HDU2255)
- HDU2255 KM优化(n^3)模板
- HDU2255 KM优化(n^3)模板
- KM算法O(n^3)模板 hdu2255
- KM模板
- KM模板
- km 模板
- KM模板
- KM模板
- KM模板
- KM算法(O(n^4)) HDU2255
- KM算法模板
- KM算法 详解+模板
- spring之旅
- Java学习笔记2:Java中Integer与String == 的使用
- IOS开发缓存机制之—内存缓存机制
- JAVA面试题大全整理
- android studio 使用NDK
- KM(n^4)模板
- javascript继承
- C++重载
- 设置navigationbar透明
- HDU 3991 Harry Potter and the Present II(Floyd+DAG最小路径覆盖)
- android面试题目2
- C语言进阶
- 图的遍历
- http://blog.csdn.net/innost?viewmode=contents