UVA 11383
来源:互联网 发布:各种排序算法的比较 编辑:程序博客网 时间:2024/04/29 13:48
题意无关 完全套结论
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>//#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define pi acos(-1.0)#define ls (rt<<1)#define rs ((rt<<1)|1)#define mid ((l+r)>>1)using namespace std;const int maxn = 550;const double eps = 1e-10;int w[maxn][maxn];int n;int lx[maxn],ly[maxn]; //顶标int lf[maxn];bool s[maxn],t[maxn]; //左右第i点是否标记bool match(int i){ s[i]=true; for(int j=1;j<=n;++j) if((lx[i]+ly[j]==w[i][j])&&!t[j]) { t[j]=true; if(!lf[j]||match(lf[j])) { lf[j]=i; return true; } } return false; }void update(){ int a=1<<30; for(int i=1;i<=n;++i) if(s[i]) for(int j=1;j<=n;++j) if(!t[j]) a=min(a,lx[i]+ly[j]-w[i][j]); for(int i=1;i<=n;++i) { if(s[i]) lx[i]-=a; if(t[i]) ly[i]+=a; }}int km(){// for(int i=1;i<=n;i++) for(int i=1;i<=n;++i) { lf[i]=ly[i]=0; lx[i]=*max_element(w[i]+1,w[i]+n+1); } for(int i=1;i<=n;++i) { while(1) { for(int j=1;j<=n;++j) s[j]=t[j]=0; if(match(i))break; else update(); } } int res=0; for(int i=1;i<=n;++i){res+=lx[i];res+=ly[i];} return res;}int main(){ while(~scanf("%d",&n)) { memset(w,0,sizeof w); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) scanf("%d",&w[i][j]); int ans=km(); for(int i=1;i<=n;i++) { if(i==1)printf("%d",lx[i]); else printf(" %d",lx[i]); } puts(""); for(int i=1;i<=n;i++) { if(i==1)printf("%d",ly[i]); else printf(" %d",ly[i]); } puts(""); printf("%d\n",ans); }}
0 0
- UVA 11383
- UVA 11383 KM性质
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- DB2自动启动
- cocos2d坐标系全解
- 保护模式及其编程——实模式与保护模式的切换
- javaweb学习笔记 mac如何下配置tomcat7
- JAVA深复制(深克隆)与浅复制(浅克隆)
- UVA 11383
- 2014年新开始的迷茫
- document.forms[].submit()
- 备 忘
- hadoop学习参考网址
- Struts2的工作原理
- Codeforces Round #230 (Div. 2) C. Blocked Points
- c语言-统计数字问题
- 黑马程序员-->16_输入与输出I/O(提升篇)