题干:

粘贴不过来。。。

题目大意:

500*500带权格子,每行每列要确定一个值,使row[i]+col[j] >= val[i][j],要使所有row值和col值的和最小

输出每行的row[i],和每列的col[i]。

解题报告:

跑一边KM,自带着就把我们需要的期望值给求出来了。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>using namespace std;
const int MAXN = 505;
const int INF = 0x3f3f3f3f;
int line[MAXN][MAXN];
int ex[MAXN],ey[MAXN];
bool visx[MAXN];
bool visy[MAXN];
int nxt[MAXN];
int slack[MAXN];
int N;
bool dfs(int x) {visx[x] = 1;for (int y = 1; y <= N; ++y) {if (visy[y]) continue; int tmp = ex[x] + ey[y] - line[x][y];if (tmp == 0) {visy[y] = 1;if (nxt[y] == -1 || dfs( nxt[y] )) {nxt[y] = x;return 1;}} else if(slack[y] > tmp) slack[y] = tmp;}return 0;
}
int KM() {memset(nxt, -1, sizeof nxt);memset(ey, 0, sizeof ey);for (int i = 1; i <= N; ++i) {ex[i] = line[i][1];for (int j = 2; j <= N; ++j) {ex[i] = max(ex[i], line[i][j]);}}for (int i = 1; i <= N; ++i) {fill(slack, slack + N + 1, INF);while (1) {memset(visx, 0, sizeof visx);memset(visy, 0, sizeof visy);if (dfs(i)) break;int d = INF;for (int j = 1; j <= N; ++j)if (!visy[j]) d = min(d, slack[j]);for (int j = 1; j <= N; ++j) {if (visx[j]) ex[j] -= d;if (visy[j]) ey[j] += d;else slack[j] -= d;}}}int res = 0;for (int i = 1; i <= N; ++i) res += line[ nxt[i] ][i];return res;
}
int main() {while (~scanf("%d",&N)) {for (int i = 1; i <= N; ++i)for (int j = 1; j <= N; ++j)scanf("%d", &line[i][j]);int ans = KM();for(int i = 1; i<=N; i++) {printf("%d%c",ex[i],i == N ? '\n' : ' ');}for(int i = 1; i<=N; i++) {printf("%d%c",ey[i],i == N ? '\n' : ' ');}printf("%d\n",ans);}return 0;
}

【UVA - 11383】Claw Golden Tiger (二分图最优匹配,KM算法原理)相关推荐

  1. 二分图最大权匹配 KM算法

    KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[i]=w[i][j]的边C(i,j)构成的子图(即相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配 基本概念 1.完备匹配 ...

  2. 二分图最佳完美匹配——KM算法总结

    KM 算法 求解二分图最佳完美匹配的算法. 先来看一道例题Hdu 2255. 显然是KM的裸题.假设我们要匹配集合X和Y的点,先给每个点一个顶标Lx和Ly. 为什么要给顶标? 首先顶标是我们限制边的一 ...

  3. UVa 11383 少林决胜(二分图最佳完美匹配)

    https://vjudge.net/problem/UVA-11383 题意: 给定一个N×N矩阵,每个格子里都有一个正整数W(i,j).你的任务是给每行确定一个整数row(i),每列也确定一个整数 ...

  4. 二分图的完全匹配---KM算法

    写在之前:更多二分图知识,请关注--->二分图知识导航篇 引述 KM算法全称Kuhn-Munkres,是一种求二分图完全.完美.最佳等匹配的方法,其实三个形容词都是指两个集内的所有顶点能够一一匹 ...

  5. 【算法笔记】二分图最大权匹配 - KM算法(dfs版O(n4) + bfs版O(n3))

    整理的算法模板合集: ACM模板 匈牙利算法又称为 KM 算法,可以在 O(n3)O(n^3)O(n3) 时间内求出二分图的 最大权完美匹配 . 考虑到二分图中两个集合中的点并不总是相同,为了能应用 ...

  6. 二分图最佳完美匹配——KM算法

    前情概要 学km算法之前,笔者还是希望大家已经掌握了匈牙利算法--也就是对于求解二分图最大匹配的算法.学习本算法的前提除了已经掌握C++语言之外,还需要掌握邻接表存图法,不会的朋友这里有传送门 [微笑 ...

  7. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  8. 【POJ - 2195】Going Home(二分图最优匹配,费用流 或 KM)

    题干: On a grid map there are n little men and n houses. In each unit time, every little man can move ...

  9. 训练指南 UVALive - 4043(二分图匹配 + KM算法)

    layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...

  10. 奔小康赚大钱 HDU - 2255( 二分图匹配KM算法详解)

    题目 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.  这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百 ...

最新文章

  1. poj 2063完全背包
  2. 初学php时一些术语以及一些基础知识
  3. IO流基础,创建File对象与方法是用
  4. rot90--矩阵旋转
  5. Flex 3 与 Flex 4 beta 之间的区别
  6. 跳出IT运维怪圈 看南方报业如何主动出击
  7. 新编计算机应用基础项目教程电子书,计算机应用基础新编教程-殷锋社.pdf
  8. 软工网络15个人作业
  9. 被隐藏的或许才是金子
  10. OpenWrt分支LEDE嵌入式无线路由系统定制-1.编辑环境搭建
  11. Django实战(6):对比RoR和Django的模板系统
  12. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)
  13. 换一种途径看信息,享受快捷 RSS阅读----willack.liu[原创]
  14. c++ 数字后加f_电工电子学 | 数字集成电路
  15. ParaView Volume MHD
  16. python樱桃小丸子_appium+python自动化启动app
  17. Centernet 生成高斯热图
  18. 九校联考-长沙市一中NOIP模拟Day1T3 优美序列(sequence)
  19. 浅谈React和VDom关系
  20. 只要有心,学好Linux并非难事

热门文章

  1. POJ-1236 Network of Schools 缩点
  2. python运行是哪个键_python – 如何使用回车键调用按钮命令
  3. python爬取bilibili弹幕_python爬虫:bilibili弹幕爬取+词云生成
  4. app推送以及提示音java,springboot 整合 Jpush 极光推送
  5. java 读取project_java project 和 java web project 获取路径问题
  6. len在python_len在python
  7. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  8. mysql gui 分区_一文彻底搞懂MySQL分区
  9. 210板wince键盘驱动分析和移植
  10. 进程控制2--exec族