UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw
题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列之和的和最小
思路:A二分图完美匹配的扩展,行列建二分图,权值为矩阵对应位置的值,做一次KM算法后。全部顶标之和就是最小的
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; const int MAXNODE = 505; typedef int Type;
const Type INF = 0x3f3f3f3f; struct KM {
int n;
Type g[MAXNODE][MAXNODE];
Type Lx[MAXNODE], Ly[MAXNODE], slack[MAXNODE];
int left[MAXNODE];
bool S[MAXNODE], T[MAXNODE]; void init(int n) {
this->n = n;
} void add_Edge(int u, int v, Type val) {
g[u][v] = val;
} bool dfs(int i) {
S[i] = true;
for (int j = 0; j < n; j++) {
if (T[j]) continue;
Type tmp = Lx[i] + Ly[j] - g[i][j];
if (!tmp) {
T[j] = true;
if (left[j] == -1 || dfs(left[j])) {
left[j] = i;
return true;
}
} else slack[j] = min(slack[j], tmp);
}
return false;
} void update() {
Type a = INF;
for (int i = 0; i < n; i++)
if (!T[i]) a = min(a, slack[i]);
for (int i = 0; i < n; i++) {
if (S[i]) Lx[i] -= a;
if (T[i]) Ly[i] += a;
}
} void km() {
for (int i = 0; i < n; i++) {
left[i] = -1;
Lx[i] = -INF; Ly[i] = 0;
for (int j = 0; j < n; j++)
Lx[i] = max(Lx[i], g[i][j]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) slack[j] = INF;
while (1) {
for (int j = 0; j < n; j++) S[j] = T[j] = false;
if (dfs(i)) break;
else update();
}
}
}
} gao; int n; int main() {
while (~scanf("%d", &n)) {
gao.init(n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
scanf("%d", &gao.g[i][j]);
}
gao.km();
int ans = 0;
for (int i = 0; i < n; i++) {
printf("%d%c", gao.Lx[i], i == n - 1 ? '\n' : ' ');
ans += gao.Lx[i];
}
for (int i = 0; i < n; i++) {
printf("%d%c", gao.Ly[i], i == n - 1 ? '\n' : ' ');
ans += gao.Ly[i];
}
printf("%d\n", ans);
}
return 0;
}
UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)的更多相关文章
- 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
题意:一个N*N的矩阵,第i行第j列的元素大小为w[i][j],每行求一个数row[i],每列求一个数col[j],使得row[i] + col[j] >= w[i][j],且所有的row[]与 ...
- 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 ...
- UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...
- UVA 10888 - Warehouse(二分图完美匹配)
UVA 10888 - Warehouse option=com_onlinejudge&Itemid=8&page=show_problem&category=562& ...
- Golden Tiger Claw(二分图)
Golden Tiger Claw 题意 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). solution 裸的二分图就水过了-- #incl ...
随机推荐
- 自己对javascript闭包的了解
目录 闭包的概念 谈谈函数执行环境,作用域链以及变量对象 闭包和函数柯里化 闭包造成的额外的内存占用 (注意我说的不是“内存泄漏”!) 闭包只能取得包含函数的最后一个值 正文 前言: 在这篇文章里, ...
- Springboot统一跨域配置
前言:跨域是什么? 要知道跨域的概念,我们先明确怎样算是同一个域: 同一个域指的是同一协议,同一ip,同一端口 如果这三同中有一者不同就产生了跨域. 在做前后端分离的项目中,通过ajax请求后台端口时 ...
- .Net Core(二) 下
接上面 http://www.cnblogs.com/xcodevs/p/5584218.html 在解决方案浏览器中,右击 Controllers 目录.选择添加>新建项.选择Web API控 ...
- NSLayoutConstraints加动画来改变约束
// // ViewController.m // NSLayoutAnimationDemo // // Created by ebaotong on 15/7/22. // Copyright ( ...
- sleep()和wait()的区别
1 sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. 2 Thread.sleep和Object.wait都会暂停当前的线程,对于CP ...
- android黑科技系列——应用市场省流量更新(增量升级)原理解析
一.前言 最近在看热修复相关的框架,之前我们已经看过了阿里的Dexposed和AndFix这两个框架了,不了解的同学可以点击这里进行查看:Dexposed框架原理解析 和 AndFix热修复框架原理解 ...
- 总结Linq或者lamdba的写法
var head = new OmsEcorderHead { PkEcorderHead = OrderHeadId, AppId = appid, Integral = Convert.ToDec ...
- 【PLSQL】游标
Oracle中的SQL在执行时需要分配一块内存区域,这块内存区域叫做上下文区. 上下文区中记录了SQL语句的处理信息,这些信息包括:查询返回的数据行.查询所处理的数据的行号.指向共享池中的已分析的SQ ...
- ANN:ML方法与概率图模型
一.ML方法分类: 产生式模型和判别式模型 假定输入x,类别标签y - 产生式模型(生成模型)估计联合概率P(x,y),因可以根据联合概率来生成样本:HMMs ...
- 请不要继续使用VC6.0了!
很多次和身边的同学交流,帮助同学修改代码,互相分享经验,却发现同学们依然在使用老旧的VC6.0作为编程学习的软件,不由得喊出:“请不要继续使用VC6.0了!”. VC6.0作为当年最好的IDE(集成开 ...