题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1533

#include<bits/stdc++.h>
#define fi first
#define se second
#define INF 0x3f3f3f3f
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pqueue priority_queue
#define NEW(a,b) memset(a,b,sizeof(a))
const double pi=4.0*atan(1.0);
const double e=exp(1.0);
const int maxn=1e6+;
typedef long long LL;
typedef unsigned long long ULL;
const LL mod=1e9+;
const ULL base=1e7+;
using namespace std;
struct edge{
int to,nxt,flow,cost;
}g[maxn];
int head[],pre[],dis[],cnt,s,t,tot;
int a[][];
bool vis[];
char ss[];
void add(int x,int y,int cost,int flow){
g[cnt].to=y;
g[cnt].nxt=head[x];
g[cnt].cost=cost;
g[cnt].flow=flow;
head[x]=cnt++;
}
bool spfa(){
memset(pre,-,sizeof(pre));
memset(dis,INF,sizeof(dis));
memset(vis,,sizeof(vis));
queue<int> que;
while(!que.empty()){que.pop();}
que.push(s);
dis[s]=;
vis[s]=;
while(!que.empty()){
int k=que.front();
que.pop();
vis[k]=;
int tt=head[k];
while(tt!=-){
if(dis[g[tt].to]>dis[k]+g[tt].cost&&g[tt].flow>){
pre[g[tt].to]=tt;
dis[g[tt].to]=dis[k]+g[tt].cost;
if(vis[g[tt].to]==){
que.push(g[tt].to);
vis[g[tt].to]=;
}
}
tt=g[tt].nxt;
}
}
return pre[t]!=-;
}
int maxflow(){
int ans=;
while(spfa()){
int f=INF;
for(int i=pre[t];i!=-;i=pre[g[i^].to]){
if(g[i].flow<f)
f=g[i].flow;
}
for(int i=pre[t];i!=-;i=pre[g[i^].to]){
g[i].flow-=f;
g[i^].flow+=f;
ans+=g[i].cost*f;
}
}
return ans;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF&&n&&m){
memset(head,-,sizeof(head));
cnt=tot=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
a[i][j]=tot++;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(j!=m){
add(a[i][j],a[i][j+],,INF);
add(a[i][j+],a[i][j],-,);
add(a[i][j+],a[i][j],,INF);
add(a[i][j],a[i][j+],-,);
}
if(i!=n){
add(a[i][j],a[i+][j],,INF);
add(a[i+][j],a[i][j],-,);
add(a[i+][j],a[i][j],,INF);
add(a[i][j],a[i+][j],-,);
}
}
}
s=tot++;
t=tot++;
for(int i=;i<=n;i++){
scanf("%s",ss);
for(int j=;j<m;j++){
if(ss[j]=='H'){
add(a[i][j+],t,,);
add(t,a[i][j+],,);
}
if(ss[j]=='m'){
add(s,a[i][j+],,);
add(a[i][j+],s,,);
}
}
}
printf("%d\n",maxflow());
}
}

最小费用最大流 HDU1533的更多相关文章

  1. hdu1533 Going Home 最小费用最大流 构造源点和汇点

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. [hdu1533]二分图最大权匹配 || 最小费用最大流

    题意:给一个n*m的地图,'m'表示人,'H'表示房子,求所有人都回到房子所走的距离之和的最小值(距离为曼哈顿距离). 思路:比较明显的二分图最大权匹配模型,将每个人向房子连一条边,边权为曼哈顿距离的 ...

  3. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  4. bzoj1927最小费用最大流

    其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对 我当时就这表情→   =_=你TM逗我 刚要删突然感觉dinic的模 ...

  5. ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

    将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...

  6. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  7. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  8. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

  9. hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***

    题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,          每个逮捕队伍在每个城市可以选 ...

  10. UVa11082 Matrix Decompressing(最小费用最大流)

    题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...

随机推荐

  1. android active间数据传递

    Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...

  2. Date.parse()转化日期为时间戳,ios与Android兼容写法

    把固定格式日期转化为时间戳: //格式化当地日期 new Date('2017-11-11 0:0:0') //结果为:Sat Nov 11 2017 00:00:00 GMT+0800 (中国标准时 ...

  3. Linux第一节课学习笔记

    我的目标是考过RHCE 开源软件有使用.复制.传播.收费.修改及创建衍生品自由,其中后二者只有开源软件才有,前四者开闭源共有.

  4. PythonStudy——高级语言 High-level programming language

    高级语言 高级语言(High-level programming language)相对于机器语言(machine language,是一种指令集的体系.这种指令集,称机器码(machine code ...

  5. 在Win10上使用Visual Studio2015的Android模拟器

    在Win10上使用Visual Studio2015的Android模拟器 装上win10后,安装了强大的VS2015,不仅可以开发Windows应用,还可以开发Android和iOS应用,简直神器啊 ...

  6. Python Django orm操作数据库笔记之外键和表关系

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...

  7. redis 双写一致性 看一篇成高手系列1

    首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作. 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存.又或者 ...

  8. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

  9. Git从远程clone项目报错cannot open git-upload-pack,将http.sslVerify设为false即可

    通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错 通过https访问Git远程仓库,如果服务器的SSL证书没有经过第三方机构签署,就会出现cannot ...

  10. git 在本地拉取远程分支的代码(并不做提交操作)

    1. git fetch 获取远程的所有分支 2. 在执行 git checkout -b local-branch-name origin/remote-branch  就可以将远程分支remote ...