KM算法板子2
来源:互联网 发布:武汉网络推广外包 编辑:程序博客网 时间:2024/06/05 05:56
//HDU2426
//
#include <iostream>#include<stdio.h>#include<string.h>#include<string>using namespace std;const int maxn=550;int visx[maxn],visy[maxn];int link[maxn];int lx[maxn],ly[maxn];int w[maxn][maxn];int slack[maxn];int link1[maxn];int n,m;const int inf=999999999;int find(int x){ visx[x]=1; for(int i=0;i<m;i++) { if(w[x][i]==inf||visy[i]) continue; int t=lx[x]+ly[i]-w[x][i]; if(t==0) { visy[i]=1; if(link[i]==-1||find(link[i])) { link[i]=x; link1[x]=i; return 1; } } else { if(slack[i]>t) slack[i]=t; } } return 0;}int sk(){ memset(link,-1,sizeof(link)); memset(link1,-1,sizeof(link1)); memset(ly,0,sizeof(ly)); for(int i=0;i<n;i++) { lx[i]=-inf; for(int j=0;j<m;j++) { if(w[i][j]!=inf) lx[i]=max(lx[i],w[i][j]); } } for(int i=0;i<n;i++) { //cout<<"m:"<<i<<endl; for(int j=0;j<m;j++) slack[j]=inf; while(true) { memset(visx,0,sizeof(visx)); memset(visy,0,sizeof(visy)); if(find(i)) break; // cout<<"sb"<<endl; int d=inf; for(int j=0;j<m;j++) { if(!visy[j]&&d>slack[j]) d=slack[j]; } if(d==inf) return -1; for(int j=0;j<n;j++) { if(visx[j]) lx[j]-=d; } for(int j=0;j<m;j++) { if(visy[j]) ly[j]+=d; else { slack[j]-=d; } } } } int ans=0; int flag=0; for(int i=0;i<n;i++) { if(link1[i]==-1) { flag=1; break; } else { ans+=w[i][link1[i]]; // cout<<"ans"<<ans<<endl; } } if(flag) ans=-1; return ans;}int main(){ int e; int tot=1; while(scanf("%d%d%d",&n,&m,&e)!=EOF) { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) w[i][j]=inf; } for(int i=1;i<=e;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(c>=0) { w[a][b]=c; // w[a][b]=c; } } printf("Case %d: %d\n",tot++,sk()); } return 0;}
0 0
- KM算法板子2
- KM算法板子
- hdu 2255 KM算法板子
- 二分图最大权匹配 KM算法 板子
- HDU-2255(记录km算法的板子,km求最大权,最小权匹配)
- KM算法(2)
- KM算法。。
- KM算法
- KM算法
- KM算法
- KM算法
- KM算法
- km算法
- km算法
- KM算法
- KM算法
- KM 算法
- KM算法
- 二叉树遍历求差值绝对值最大值
- C++中虚函数与晚绑定的编译器实现
- MySQL 调优/优化的 100 个建议
- 单例设计模式
- asoundrc配置文件简单介绍
- KM算法板子2
- Hoeffding不等式的证明
- HDU 1032.The 3n + 1 problem【注意细节】【估计数据不强】【8月21】
- eclipse导出可执行的jar包
- spmio 内网源部署(二)
- 小孩报数-约瑟夫问题数组链表
- JAVA12个最重要的J2EE最佳实践
- DataSetObservable,Observable<T>,DataSetObserver源码注释翻译
- POJ_2559_Largest Rectangle in a Histogram(栈)