题意:一个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的更多相关文章

  1. UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)

    UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...

  2. 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)之 ...

  3. UVA 11383 Golden Tiger Claw 金虎爪(KM算法)

    题意: 给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row ...

  4. UVA 11383 Golden Tiger Claw 题解

    题目 --> 题解 其实就是一个KM的板子 KM算法在进行中, 需要满足两个点的顶标值之和大于等于两点之间的边权, 所以进行一次KM即可. KM之后, 顶标之和就是最小的.因为如果不是最小的,就 ...

  5. 【KM算法】UVA 11383 Golden Tiger Claw

    题目大意 给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\) ...

  6. 【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 ...

  7. uva11383 Golden Tiger Claw 深入理解km算法

    /** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...

  8. UVA11383 Golden Tiger Claw

    题目 UVA11383 Golden Tiger Claw 做法 \(KM\)好题啊,满足所有边\(l(x)+l(y)≥w(x,y)\)(个人理解,如不对请及时留言),这样能满足\(\sum\limi ...

  9. Golden Tiger Claw(二分图)

    Golden Tiger Claw 题意 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). solution 裸的二分图就水过了-- #incl ...

随机推荐

  1. 初识Channel

    java.nio.channels 中的接口和类. A channel represents an open connection to an entity such as a hardware de ...

  2. jsp字段判空

    是对象吧String jsp的写法 <% if(str == null) { %> str is null <% } else { %> str not null <% ...

  3. Python 内置函数 range的使用

    内置range函数可以用来方便的产生等差的数值序列.如: >>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, ...

  4. Android学习笔记:ListView简单应用--显示文字列表

    在activity中的编写如下代码: final List<String> items = new ArrayList<String>(); //设置要显示的数据,这里因为是例 ...

  5. Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)

    Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应 ...

  6. cocos2d-x plist文件各个属性的含义

    plist文件是小图在合并成大图的时候生成的配置文件,所以须要由大图+plist文件能够全然还原出小图. 合图后的大图整体尺寸面积一般要小于原来的小图面积之和,是由于合图中会去掉小图周围的透明像素(当 ...

  7. muduo 与 libevent2 吞吐量对照

    libevent 是一款很好用的 C 语言网络库,它也採用 Reactor 模型,正好能够与 muduo 做一对照. 本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐 ...

  8. swf上传文件

    以下是自学it网--中级班上课笔记 网址:www.zixue.it 引入的js包自己在网上找一个,这里好像不支持上传文件,反正我没找到,呵呵~~ html文件 <!DOCTYPE html PU ...

  9. CSS - ResetCss

    /* KISSY CSS Reset 理念:清除和重置是紧密不可分的 特色:1.适应中文 2.基于最新主流浏览器 */ /* 清除内外边距 */ body, h1, h2, h3, h4, h5, h ...

  10. BZOJ 3011: [Usaco2012 Dec]Running Away From the Barn( dfs序 + 主席树 )

    子树操作, dfs序即可.然后计算<=L就直接在可持久化线段树上查询 -------------------------------------------------------------- ...