【KM算法】UVA 11383 Golden Tiger Claw
题目大意
给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\)最小,输出这个和。
样例输入
2
1 1
1 1
数据范围
\(0\le N\le 500\)
样例输出
1 1
0 0
2
思路
题面花里胡哨,其实就是二分图带权匹配,求的数组其实就是KM算法里的顶标。就是模板啊!这也太水了。
代码
#include <cstdio>
#include <cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=500+10;
int n;
int g[maxn][maxn];
int match[maxn],wx[maxn],wy[maxn],slack[maxn];
bool visx[maxn],visy[maxn];
bool dfs(int u){
visx[u]=true;
for(int v=1;v<=n;v++){
if(!visy[v]){
int t=wx[u]+wy[v]-g[u][v];
if(t==0){
visy[v]=true;
if(match[v]==-1||dfs(match[v])){
match[v]=u;
return true;
}
}
else if(slack[v]>t)slack[v]=t;
}
}
return false;
}
int KM(){
memset(match,-1,sizeof(match));
memset(wx,0,sizeof(wx));
memset(wy,0,sizeof(wy));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(g[i][j]>wx[i])wx[i]=g[i][j];
}
}
for(int x=1;x<=n;x++){
for(int i=1;i<=n;i++)
slack[i]=INF;
while(1){
memset(visx,false,sizeof(visx));
memset(visy,false,sizeof(visy));
if(dfs(x))break;
int minz=INF;
for(int i=1;i<=n;i++)
if(!visy[i]&&minz>slack[i])
minz=slack[i];
for(int i=1;i<=n;i++)
if(visx[i])wx[i]-=minz;
for(int i=1;i<=n;i++){
if(visy[i])wy[i]+=minz;
else slack[i]-=minz;
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
ans+=wx[i]+wy[i];
return ans;
}
int main(){
while(~scanf("%d",&n)){
memset(g,0,sizeof(g));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&g[i][j]);
}
}
int ans=KM();
printf("%d",wx[1]);
for(int i=2;i<=n;i++)
printf(" %d",wx[i]);
printf("\n");
printf("%d",wy[1]);
for(int i=2;i<=n;i++)
printf(" %d",wy[i]);
printf("\n");
printf("%d\n",ans);
}
return 0;
}
【KM算法】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 金虎爪(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之后, 顶标之和就是最小的.因为如果不是最小的,就 ...
- 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(最佳二分图完美匹配)
题意:在一个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算法副产物)
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 ...
随机推荐
- HTML-CSS-JS Prettify 代码格式化插件
前提:已经安装 node.js.安装插件 HTML-CSS-JS Prettify,修改node路径,即可通过单击右键 HTML-CSS-JS Prettify 中的 Prettify Code 使用 ...
- Python3实现zip分卷压缩
Python实现zip分卷压缩 使用 zipfile 库 查看 官方中文文档 利用 Python 压缩 ZIP 文件,我们第一反应是使用 zipfile 库,然而,它的官方文档中却明确标注" ...
- Noip2017 Day2 T1 奶酪
题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为z =0,奶酪的上表面为 ...
- openstack核心组件——glance— 镜像服务(6)
云计算openstack核心组件——glance— 镜像服务(6) 一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像 ...
- flutter实现可缩放可拖拽双击放大的图片功能
flutter实现可缩放可拖拽双击放大的图片功能 可缩放可拖拽的功能,可实现图片或者其他widget的缩放已经拖拽并支持双击放大的功能 我们知道官方提供了双击缩放,但是不支持拖拽的功能,我们要实现向百 ...
- 关于消息中间件ActiveMQ的企业级应用
几个月前看到项目中配置了activeMq,于是想通透的掌握activeMq,便去网上学习搜寻资料,找到这一篇博客挺不错的,解释的比较清楚,包括原理使用和配置,特此把它分享给大家. 众所周知,消息中间件 ...
- 性能测试Jmeter安装
一. Jmeter下载地址: http://jmeter.apache.org/download_jmeter.cgi 二. JDK下载地址: https://www.oracle.com/tec ...
- 新手学习Python第三方包库pip安装失败总结
这篇文章纯原创,是之前自己学习使用pyhton时遇到的问题,故在此记录一下. 问题与需求:用python下载第三方库或包的时候出错怎么办? 方法有一下三种,可以解决大部分的问题. 1.在cmd命令控制 ...
- 原生JavaScript封装的jsonp跨域请求
原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 搭建 Spring 源码阅读环境
前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...