UVa 11383 少林决胜(二分图最佳完美匹配)
https://vjudge.net/problem/UVA-11383
题意:
给定一个N×N矩阵,每个格子里都有一个正整数W(i,j)。你的任务是给每行确定一个整数row(i),每列也确定一个整数col(i),使得对于任意格子(i,j),w(i,j)<=row(i)+col(j)。所有的row(i)和col(i)只和应尽量小。
思路:
利用二分图最佳完美匹配当中的l(x)+l(y)>=w(i,j),直接用KM算法即可。
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 #include<cstdio> 7 using namespace std; 8 const int maxn=500+5; 9 10 int W[maxn][maxn], n; 11 int Lx[maxn]; 12 int Ly[maxn]; 13 int Left[maxn]; 14 bool S[maxn], T[maxn]; 15 16 bool Match(int i) 17 { 18 S[i] = true; 19 for (int j = 1; j <= n; j++) 20 { 21 if (Lx[i] + Ly[j] == W[i][j] && !T[j]) 22 { 23 T[j] = true; 24 if (!Left[j] || Match(Left[j])) 25 { 26 Left[j] = i; 27 return true; 28 } 29 } 30 } 31 return false; 32 } 33 34 void Update() 35 { 36 int a = 1 << 30; 37 for (int i = 1; i <= n; i++) 38 { 39 if (S[i]) 40 { 41 for (int j = 1; j <= n; j++) 42 { 43 if (!T[j]) 44 { 45 a = min(a, Lx[i] + Ly[j] - W[i][j]); 46 } 47 } 48 } 49 } 50 for (int i = 1; i <= n; i++) 51 { 52 if (S[i]) 53 Lx[i] -= a; 54 if (T[i]) 55 Ly[i] += a; 56 } 57 } 58 59 void KM() 60 { 61 for (int i = 1; i <= n; i++) 62 { 63 Left[i] = 0; 64 Lx[i] = 0; 65 Ly[i] = 0; 66 for (int j = 1; j <= n; j++) 67 { 68 Lx[i] = max(Lx[i], W[i][j]); 69 } 70 } 71 for (int i = 1; i <= n; i++) 72 { 73 while (true) 74 { 75 memset(S, 0, sizeof(S)); 76 memset(T, 0, sizeof(T)); 77 if (Match(i)) 78 break; 79 else 80 Update(); 81 } 82 } 83 } 84 85 int main() 86 { 87 //freopen("D:\\input.txt","r",stdin); 88 while(~scanf("%d",&n)) 89 { 90 for(int i=1;i<=n;i++) 91 { 92 for(int j=1;j<=n;j++) 93 scanf("%d",&W[i][j]); 94 } 95 int ans=0; 96 KM(); 97 for(int i=1;i<=n;i++) 98 { 99 printf("%d%c", Lx[i], i == n ? '\n' : ' '); 100 ans+=Lx[i]; 101 } 102 for(int i=1;i<=n;i++) 103 { 104 printf("%d%c", Ly[i], i == n ? '\n' : ' '); 105 ans+=Ly[i]; 106 } 107 printf("%d\n",ans); 108 } 109 return 0; 110 }
转载于:https://www.cnblogs.com/zyb993963526/p/6883944.html
UVa 11383 少林决胜(二分图最佳完美匹配)相关推荐
- UVA - 1045 The Great Wall Game(二分图最佳完美匹配)
题目大意:给出棋盘上的N个点的位置.如今问将这些点排成一行或者一列.或者对角线的最小移动步数(每一个点都仅仅能上下左右移动.一次移动一个) 解题思路:暴力+二分图最佳完美匹配 #include < ...
- 二分图最佳完美匹配——KM算法总结
KM 算法 求解二分图最佳完美匹配的算法. 先来看一道例题Hdu 2255. 显然是KM的裸题.假设我们要匹配集合X和Y的点,先给每个点一个顶标Lx和Ly. 为什么要给顶标? 首先顶标是我们限制边的一 ...
- 二分图最佳完美匹配——KM算法
前情概要 学km算法之前,笔者还是希望大家已经掌握了匈牙利算法--也就是对于求解二分图最大匹配的算法.学习本算法的前提除了已经掌握C++语言之外,还需要掌握邻接表存图法,不会的朋友这里有传送门 [微笑 ...
- 图论--二分图最佳完美匹配(KM模板)
#include <iostream> #include <cstring> #include <cstdio>using namespace std; const ...
- 二分图的最佳完美匹配(模板)
二分图的最佳完美匹配,也就是带权值的无向二分图中权值之和最大的完美匹配,整个图分为两个不相交的集合x和y,采用KM算法求解,也称匈牙利算法. 时间复杂度为O(n^3) typedef int type ...
- hdu-3488-Tour(KM最佳完美匹配)
题意:有N个城市,M条街道,每条街道是单向的,现在要你设计多条路线覆盖所有的点,每条路线都是一个环,并且每个点仅能被一条路线覆盖且只经过一次(终始点除外) 分析:因为是有向圈,所以每个点的入度和出度应 ...
- Uvalive 4043 - Ants(二分图完美匹配)
题目链接 https://vjudge.net/problem/UVALive-4043 [题意] 给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连起来,其中每条线段恰好连接 ...
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...
最新文章
- mysql数据库中nchar_MySQL数据库中CHAR与VARCHAR之争
- 什么原因导致芯片短路_常见的芯片故障现象
- linux 设置网络
- pcm 采样率转换_PCM编码与Waveform音频文件(.wav)格式详解
- Spring Mobile 1.1.0.RC1 和 1.0.2 发布
- Keras官方中文文档:Keras安装和配置指南(Windows)
- Codeforces.700E.Cool Slogans(后缀自动机 线段树合并 DP)
- 配好lsd_slam后的使用PTAM工具标定相机
- python数据分析与可视化答案学堂云_智慧树知到_Python数据分析与数据可视化_最新答案...
- 为什么镜子里的影像左右颠倒而不是上下颠倒 - Google 谷歌 百度 baidu 阿里巴巴 alibaba 微软 华
- OSI体系结构——数据链路层详解
- 蜂巢3.0(原 素材管理器)开发笔记
- excel数据核对技巧:如何用函数公式标识输入正误
- 加快SP3下载速度并使用第三方系统主题!适用于XP SP3的TCPIP连接数与主题破解增强补丁下载...
- redis的sentinel mode
- 网易im聊天室的集成
- 打印机驱动正在使用无法删除的解决方案
- arm-linux东东之nand之一:nand 初始化
- 计算机教室场地技术条,特殊教育学校功能室建设标准
- 什么是大数据?带你深度了解大数据
热门文章
- 华为鸿蒙万物互联应用,为什么我需要万物互联? 鸿蒙能带来什么?
- mysql如何大矩阵_如何打印矩阵
- matlab 读取图片后分区域编号_你的第一个有限元求解器——仅十行MATLAB代码
- go 是常驻内存吗_图解 Go 内存分配器
- finallshell使用_FinalShell使用---Xshell的良心国产软件
- mysql scale,Mailchimp Scale:a MySQL Perspective
- C语言排序方法-----直接插入排序
- python多维矩阵基础运算中的一点困惑
- 深度学习前人精度很高了怎么创新?
- Excel进行粗糙的快速更换图片背景颜色