Uva - 11383 - Golden Tiger Claw
题意:一个N*N的矩阵,第i行第j列的元素大小为w[i][j],每行求一个数row[i],每列求一个数col[j],使得row[i] + col[j] >= w[i][j],且所有的row[]与所有的col[]和总和最小( N <= 500, 其它输入数为正整数且 <= 100)。
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2378
——>>row[i] + col[j] >= w[i][j],这个恰恰是二分图最佳完美匹配的一个式子,所以,以行row为X结点,以列col为Y结点,权值即为对应元素w[i][j]的值建图,跑一次KM就好。
另外发现:用scanf("%d", &N) == 1比用~scanf("%d", &N)快了3ms。。。
#include <cstdio>
#include <algorithm> using namespace std; const int maxn = 500 + 10;
const int INF = 0x3f3f3f3f; int N, w[maxn][maxn], lx[maxn], ly[maxn], fa[maxn];
bool S[maxn], T[maxn]; bool match(int i){
S[i] = 1;
for(int j = 1; j <= N; j++) if(lx[i] + ly[j] == w[i][j] && !T[j]){
T[j] = 1;
if(!fa[j] || match(fa[j])){
fa[j] = i;
return 1;
}
}
return 0;
} void update(){
int a = INF;
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;
}
} void KM(){
for(int i = 1; i <= N; i++){
fa[i] = lx[i] = ly[i] = 0;
for(int j = 1; j <= N; j++) lx[i] = max(lx[i], w[i][j]);
}
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();
}
} void read(){
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++) scanf("%d", &w[i][j]);
} void solve(){
for(int i = 1; i < N; i++) printf("%d ", lx[i]); printf("%d\n", lx[N]);
for(int i = 1; i < N; i++) printf("%d ", ly[i]); printf("%d\n", ly[N]);
int sum = 0;
for(int i = 1; i <= N; i++) sum += lx[i] + ly[i];
printf("%d\n", sum);
} int main()
{
while(scanf("%d", &N) == 1){
read();
KM();
solve();
}
return 0;
}
Uva - 11383 - Golden Tiger Claw的更多相关文章
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...
- UVA 11383 Golden Tiger Claw(最佳二分图完美匹配)
题意:在一个N*N的方格中,各有一个整数w(i,j),现在要求给每行构造row(i),给每列构造col(j),使得任意w(i,j)<=row(i)+col(j),输出row(i)与col(j)之 ...
- UVA 11383 Golden Tiger Claw 金虎爪(KM算法)
题意: 给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row ...
- UVA 11383 Golden Tiger Claw 题解
题目 --> 题解 其实就是一个KM的板子 KM算法在进行中, 需要满足两个点的顶标值之和大于等于两点之间的边权, 所以进行一次KM即可. KM之后, 顶标之和就是最小的.因为如果不是最小的,就 ...
- 【KM算法】UVA 11383 Golden Tiger Claw
题目大意 给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\) ...
- 【UVA 11383】 Golden Tiger Claw (KM算法副产物)
Omi, Raymondo, Clay and Kimiko are on new adventure- in search of new Shen Gong Wu. But EvilBoy Geni ...
- uva11383 Golden Tiger Claw 深入理解km算法
/** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...
- UVA11383 Golden Tiger Claw
题目 UVA11383 Golden Tiger Claw 做法 \(KM\)好题啊,满足所有边\(l(x)+l(y)≥w(x,y)\)(个人理解,如不对请及时留言),这样能满足\(\sum\limi ...
- Golden Tiger Claw(二分图)
Golden Tiger Claw 题意 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). solution 裸的二分图就水过了-- #incl ...
随机推荐
- Tcl语言笔记之一
1,一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开 2,置换 substitution %set y x+100 // ...
- 基于visual Studio2013解决C语言竞赛题之0522和为素
题目
- Linux远程桌面工具 -- NoMachine
玩Linux系统,会经常用到远程桌面软件. 我一直用的2个是Xmanager 和 VNC. 今天看到一个新软件: NoMachine. NoMachine NX 是一个快速的终端服务器和虚拟桌面软件, ...
- NYOJ-开灯问题
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度: 描写叙述 有n盏灯,编号为1~n.第1个人把全部灯打开,第2个人按下全部编号为2 的倍数的开关(这些灯将被关掉),第3 ...
- BZOJ 3367: [Usaco2004 Feb]The Big Game 球赛( dp )
dp(i)表示前i个人最少坐多少辆车, dp(i) = min(dp(j) + 1, dp(i)) (0 <= j < i 且 (i, j]的人能坐在一辆车上) 时间复杂度O(n²) -- ...
- 通过DWR简化AJAX开发
DWR(Direct Web Remoting)是一个WEB远程调用框架,采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScrip ...
- Java的位运算符具体解释实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包含了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.以下 ...
- 【cocos2d-x】3.0使用cocos-console创建,编,部署游戏
原文地址:http://fengchenluoyu.duapp.com/272.html cocos2d-x 3.0開始添加了一个cocos-console组件,它位于cocos2d-x 3.0的to ...
- Java基础02 方法与数据成员
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...
- ORA-01403: no data found
在项目的存储过程中有这样一句话 select jgdm,jgmc into parm_mrjgdm,parm_mrjgmc From BL_KHXX where jgdm=PARM_JGDM; 每次 ...