最大流增广路(KM算法) HDOJ 1533 Going Home
- /*
- 最小费用流:KM算法是求最大流,只要w = -w就可以了,很经典的方法
- */
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- const int MAXN = 1e2 + ;
- const int INF = 0x3f3f3f3f;
- int x[MAXN], y[MAXN];
- int w[MAXN][MAXN];
- int visx[MAXN], visy[MAXN];
- int ly[MAXN];
- int mx[MAXN], my[MAXN];
- int hx[MAXN], hy[MAXN];
- char maze[MAXN][MAXN];
- int n, m, un, vn, d;
- bool DFS(int u) {
- visx[u] = true;
- for (int i=; i<=un; ++i) {
- if (!visy[i] && x[u] + y[i] == w[u][i]) {
- visy[i] = true;
- if (ly[i] == - || DFS (ly[i])) {
- ly[i] = u; return true;
- }
- }
- else if (x[u] + y[i] > w[u][i]) d = min (d, x[u] + y[i] - w[u][i]);
- }
- return false;
- }
- int KM(void) {
- for (int i=; i<=un; ++i) {
- x[i] = -INF;
- for (int j=; j<=vn; ++j) {
- x[i] = max (x[i], w[i][j]);
- }
- }
- memset (ly, -, sizeof (ly));
- memset (y, , sizeof (y));
- for (int i=; i<=un; ++i) {
- while (true) {
- memset (visx, false, sizeof (visx));
- memset (visy, false, sizeof (visy));
- d = INF;
- if (DFS (i)) break;
- for (int i=; i<=un; ++i) {
- if (visx[i]) x[i] -= d;
- }
- for (int j=; j<=vn; ++j) {
- if (visy[j]) y[j] += d;
- }
- }
- }
- int res = ;
- for (int i=; i<=un; ++i) {
- res += x[i] + y[i];
- }
- return res;
- }
- int main(void) { //HDOJ 1533 Going Home
- //freopen ("HDOJ_1533.in", "r", stdin);
- while (scanf ("%d%d", &n, &m) == ) {
- if (!n && !m) break;
- for (int i=; i<=n; ++i) {
- scanf ("%s", maze[i] + );
- }
- un = vn = ;
- for (int i=; i<=n; ++i) {
- for (int j=; j<=m; ++j) {
- if (maze[i][j] == 'm') mx[++un] = i, my[un] = j;
- else if (maze[i][j] == 'H') hx[++vn] = i, hy[vn] = j;
- }
- }
- for (int i=; i<=un; ++i) {
- for (int j=; j<=vn; ++j) {
- w[i][j] = -(abs (mx[i] - hx[j]) + abs (my[i] - hy[j]));
- }
- }
- printf ("%d\n", -KM ());
- }
- return ;
- }
最大流增广路(KM算法) HDOJ 1533 Going Home的更多相关文章
- 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...
- 最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
题目传送门 /* KM: 相比HDOJ_1533,多了重边的处理,还有完美匹配的判定方法 */ #include <cstdio> #include <cmath> #incl ...
- hdu 3549 Flow Problem【最大流增广路入门模板题】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...
- Power Network (最大流增广路算法模板题)
Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20754 Accepted: 10872 Description A p ...
- 网络最大流最短增广路Dinic算法模板
#include<cstdio> #include<cstring> #include<string> #include<cmath> #include ...
- 网络最大流增广路模板(EK & Dinic)
EK算法: int fir[maxn]; int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm]; int e_max; int p[maxn],q[ma ...
- 一般增广路方法求网络最大流(Ford-Fulkerson算法)
/* Time:2015-6-18 接触网络流好几天了 写的第一个模版————Ford-Fulkerson算法 作用:求解网络最大流 注意:源点是0 汇点是1 如果题目输入的是1到n 请预处理减1 * ...
- 网络流初步:<最大流>——核心(增广路算法)(模板)
增广路的核心就是引入了反向边,使在进行道路探索选择的时候增加了类似于退路的东西[有一点dp的味道??] 具体操作就是:1.首先使用结构体以及数组链表next[ MAXN ]进行边信息的存储 2.[核心 ...
- HDU3549 Flow Problem(网络流增广路算法)
题目链接. 分析: 网络流增广路算法模板题.http://www.cnblogs.com/tanhehe/p/3234248.html AC代码: #include <iostream> ...
随机推荐
- 前端开发:JavaScript---ECMAScript
JavaScript:JavaScript是一种web前端的描述语言,也是一种基于对象(object)和事件驱动(Event Driven)的脚本语言.它运行在客户端从而减轻服务器的负担. js是一种 ...
- 【BZOJ4868】期末考试(整数三分)
题意: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...
- 在mysql数据库中,文章表设计有啥好的思路
Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...
- Ubuntu 16.04安装unrar解压RAR文件
除了7zip:http://www.cnblogs.com/EasonJim/p/7124306.html之外,还可以安装unrar进行解压RAR文件. 安装 sudo apt-get install ...
- 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)
接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...
- Spring PropertyPlaceholderConfigure 载入配置文件
在開始这篇博客的主题之前,我们先来了解一下Spring配置文件以及包括的相关内容. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...
- java.lang.IllegalArgumentException: sheetName '' is invalid
1.错误描写叙述 java.lang.IllegalArgumentException: sheetName '' is invalid - character count MUST be great ...
- c# 获取根节点的属性信息
<?xml version="1.0" encoding="UTF-8"?> <!--课程封面信息 --> <GK version ...
- Copy Selected Text from any window
https://social.msdn.microsoft.com/Forums/windows/en-US/1dc356e6-9441-44de-9eda-247003fa6ef5/copy-sel ...
- URL 字段简析
URL:统一资源定位符:URL是uri的一个子集,另外一个子集是URN. URL语法:(来自HTTP权威指南中文版P29) 组件 描述 默认值 方案 访问服务器以获取资源时要使用哪种协议 无 用户 某 ...