【hdu 1533】Going Home
【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1533
【题意】
【题解】
则这个时候跑一下最小费用最大流就好.
【错的次数】
【反思】
【代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 100;
const int NN = 3e4;
const int INF = 0x3f3f3f3f; struct abc{
int from,en,flow,nex,cost;
}; int n,m,totm,fir[2*N+50],dis[N*2+50],pre[2*N+50],mi[2*N+50],ans;
char s[N+10][N+10];
vector <pii> H,M;
abc bian[NN];
bool inq[2*N+50];
queue <int> dl; void add(int x,int y,int flow,int cost){
bian[totm].nex = fir[x];
fir[x] = totm;
bian[totm].from = x;
bian[totm].en = y;
bian[totm].cost = cost;
bian[totm].flow = flow;
totm++; bian[totm].nex = fir[y];
fir[y] = totm;
bian[totm].from = y;
bian[totm].en = x;
bian[totm].cost = -cost;
bian[totm].flow = 0;
totm++;
} bool spfa(int s,int t){
ms(dis,INF),ms(inq,0),ms(mi,INF);
dis[s] = 0,inq[s] = 1;
dl.push(s);
pre[t] = -1;
while (!dl.empty()){
int x = dl.front();
inq[x] = false;
dl.pop();
for (int i = fir[x];i!=-1;i = bian[i].nex){
int y = bian[i].en;
if (bian[i].flow && dis[y] > dis[x] + bian[i].cost){
dis[y] = dis[x] + bian[i].cost;
mi[y] = min(bian[i].flow,mi[x]);
pre[y] = i;
if (!inq[y]){
inq[y] = true;
dl.push(y);
}
}
}
}
if (pre[t]==-1) return false;
int now = t;
while (now != s){
int temp = pre[now];
bian[temp].flow -= mi[t];
bian[temp^1].flow += mi[t];
now = bian[temp].from;
ans += mi[t]*bian[temp].cost;
}
return true;
} int main(){
//Open();
//Close();
while (~ri(n)){
ans = 0;
ri(m);
if (n == 0 && m == 0) break;
rep1(i,0,n-1)
rs(s[i]);
H.clear(),M.clear();
rep1(i,0,n-1)
rep1(j,0,m-1)
if (s[i][j]=='H')
H.pb(mp(i,j));
else if (s[i][j]=='m')
M.pb(mp(i,j));
totm = 0;
ms(fir,255);
int len1 = H.size(),len2 = M.size();
rep1(i,0,len1-1) add(0,i+1,1,0);
rep1(i,0,len2-1) add(i+1+len1,len1+len2+1,1,0);
rep1(i,0,len1-1)
rep1(j,0,len2-1)
add(i+1,len1+j+1,1,abs(M[j].fi-H[i].fi)+abs(M[j].se-H[i].se));
while (spfa(0,len1+len2+1));
oi(ans);puts("");
}
return 0;
}
【hdu 1533】Going Home的更多相关文章
- 【HDU 1533】 Going Home (KM)
Going Home Problem Description On a grid map there are n little men and n houses. In each unit time, ...
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
随机推荐
- 线程框架Executor的用法举例
java5线程框架Executor的用法举例 Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务.这个框架主要由三个接口和 ...
- 玲珑学院 1010 - Alarm
1010 - Alarm Time Limit:1s Memory Limit:128MByte DESCRIPTION Given a number sequence [3,7,22,45,116, ...
- Scrapy框架之日志等级
一.日志等级 CRITICAL:严重错误 ERROR:一般错误 WARNING:警告 INFO: 一般信息 DEBUG:调试信息 [注意:默认的日志等级是DEBUG] 二.日志等级设置 修改setti ...
- 【Henu ACM Round#18 C】Ilya and Sticks
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用cnt[i]记录数字i出现的次数就好. 然后i从1e6逆序到1 如果cnt[i+1]和cnt[i]>0同时成立的话. 那么得 ...
- UVALive 6869 Repeated Substrings
Repeated Substrings Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Descri ...
- 上下文切换查看 & sar
怀疑CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b.sar -u和 sar-d来看 sar –W 查看页面交换发生状况 [root@localhost ~] ...
- ORA-4031错误 解决方法
遇到ORA-4031错误时.你的心里会不会发怵?ORA-4031非常easy导致数据库出现异常崩溃,当Oracle的核心进程无法获得共享池内存时.它们会把数据库异常宕掉.当然,ORA-4031就像黄灯 ...
- sim800c GPRS模块的透传模式
一.透传模式 基于sim800c GPRS模块在建立TCP/IP连接情况下,可以设置进入透传模式,用来接收和发送数据,一旦进入即从串口收到的数据将被打包,然后发送.接收同理. 注意在透传模式下所有的A ...
- MyBatis学习总结(11)——MyBatis动态Sql语句
MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...
- golang 简单web服务
1.golang print输入 package main import "fmt" func main() { fmt.Printf("Hello World!\n&q ...