UVA11383 Golden Tiger Claw KM算法
题目链接:传送门
分析
这道题乍看上去没有思路,但是我们仔细一想就会发现这道题其实是一个二分图最大匹配的板子
我们可以把这道题想象成将男生和女生之间两两配对,使他们的好感度最大
我们把矩阵中的元素\(a[x][y]\)看成女生\(x\)和男生\(y\)之间的好感度,跑一个KM算法
因为KM算法会维护\(ex_{}boy[x] + ex_{}girl[y]>=love[y][x]\),所以最后的结果就是我们想要的
注意有多组数据
代码
#include<bits/stdc++.h>
using namespace std;
#define hzoi 0
const int maxn=505;
int love[maxn][maxn];
int ex_girl[maxn],ex_boy[maxn];
bool vis_girl[maxn],vis_boy[maxn];
int match[maxn],slack[maxn];
int n;
bool dfs(int girl){
vis_girl[girl]=1;
for(int boy=1;boy<=n;boy++){
if(vis_boy[boy]) continue;
int gap=ex_girl[girl]+ex_boy[boy]-love[girl][boy];
if(gap==0){
vis_boy[boy]=1;
if(match[boy]==-1 || dfs(match[boy])){
match[boy]=girl;
return 1;
}
} else {
slack[boy]=min(slack[boy],gap);
}
}
return 0;
}
void KM(){
memset(match,-1,sizeof(match));
memset(ex_boy,0,sizeof(ex_boy));
for(int i=1;i<=n;i++){
ex_girl[i]=love[i][1];
for(int j=2;j<=n;j++){
ex_girl[i]=max(love[i][j],ex_girl[i]);
}
}
for(int i=1;i<=n;i++){
memset(slack,0x3f,sizeof(slack));
while(1){
memset(vis_boy,0,sizeof(vis_boy));
memset(vis_girl,0,sizeof(vis_girl));
if(dfs(i)) break;
int d=0x3f3f3f3f;
for(int j=1;j<=n;j++){
if(!vis_boy[j]) d=min(d,slack[j]);
}
for(int j=1;j<=n;j++){
if(vis_girl[j]) ex_girl[j]-=d;
if(vis_boy[j]) ex_boy[j]+=d;
else slack[j]-=d;
}
}
}
}
int main(){
while(scanf("%d",&n)!=EOF){
memset(love,0,sizeof(love));
memset(ex_girl,0,sizeof(ex_girl));
memset(ex_boy,0,sizeof(ex_boy));
memset(vis_girl,0,sizeof(vis_girl));
memset(vis_boy,0,sizeof(vis_boy));
memset(match,0x3f,sizeof(match));
memset(slack,-1,sizeof(slack));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&love[i][j]);
}
}
KM();
int ans=0;
for(int i=1;i<=n;i++){
if(i==1) printf("%d",ex_girl[i]);
else printf(" %d",ex_girl[i]);
ans+=ex_girl[i];
}
printf("\n");
for(int i=1;i<=n;i++){
if(i==1) printf("%d",ex_boy[i]);
else printf(" %d",ex_boy[i]);
ans+=ex_boy[i];
}
printf("\n%d\n",ans);
}
return 0;
}
UVA11383 Golden Tiger Claw KM算法的更多相关文章
- UVA11383 Golden Tiger Claw —— KM算法
题目链接:https://vjudge.net/problem/UVA-11383 题解: 根据KM()算法,标杆满足:l(x) + l(y) >= w(x, y) . 当求完最大权匹配之后,所 ...
- 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 ...
- UVA-11383 Golden Tiger Claw (KM算法)
题目大意:一张可行二分图的权值以邻接矩阵的形式给了出来,现在要找每一个节点的可行顶标,使顶标和最小. 题目分析:直接用KM算法,结束后顶标之和最小...模板题. 代码如下: # include< ...
- 【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 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...
- Golden Tiger Claw(二分图)
Golden Tiger Claw 题意 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). solution 裸的二分图就水过了-- #incl ...
- UVA 11383 Golden Tiger Claw 金虎爪(KM算法)
题意: 给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row ...
- 【KM算法】UVA 11383 Golden Tiger Claw
题目大意 给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\) ...
随机推荐
- 记一次discuz修改首页图片路径问题
1.找到图片路径拼装文件 首先打开根目录下的template目录找到首页文件 打开后找到图片列表的拼装位置 // 链接示例: <!--{eval $imagelistkey = getforum ...
- 你是项目经理了![IT项目经理成长晋升记1]
凉爽的秋风,吹走了严热的夏季,K公司内部传来一个重磅消息.销售团队披荆斩棘,过三关斩六将,成功胜出,拿下公司在C省的首单,为C省市场的开拓打下了基础. K公司是2003年“非典”时期成立,坐落在美丽的 ...
- 算法讲堂二:组合数学 & 概率期望DP
组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...
- 【python-opencv】读取、显示、写入图像
1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方式. cv.IMREAD_COL ...
- 如何优雅地停止 Spring Boot 应用?
首先来介绍下什么是优雅地停止,简而言之,就是对应用进程发送停止指令之后,能保证正在执行的业务操作不受影响,可以继续完成已有请求的处理,但是停止接受新请求. 在 Spring Boot 2.3 中增加了 ...
- [寒假学习]ps知识
小学就开始学了,还是要感谢当时年轻不懂事到处研究怎么画画哈哈哈哈,不过到现在有点忘,寒假在家禁足也无聊,寻思着重拾画笔来着,复习一下,冲! 为了防止看完就忘用博客记录一下小笔记 1. 一些快捷键的 ...
- 20184302 2019-2020-2 《Python程序设计》实验四报告
20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...
- pytorch入门2.0构建回归模型初体验(数据生成)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- 【论文阅读】Harris角点算法
#coding=utf-8 from PIL import Image import numpy as np from scipy.ndimage import filters import matp ...
- beego register db `default`, sql: unknown driver "mysql" (forgotten import?)
首先先去你的目录下找找这个文件里有没有东西,或者有没有这个文件 如果没有 执行下面两个命令: 下载:go get github.com/Go-SQL-Driver/MySQL 安装:go instal ...