博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2195 Going Home【最小费用最大流】
阅读量:5098 次
发布时间:2019-06-13

本文共 1599 字,大约阅读时间需要 5 分钟。

刚读的时候以为是Optimal Milking那道题,但实际上不是的;但借此我也想清了一些东西。

optimal milking里面问的是走的最远的那头奶牛最少走多少,对应到这道题里就是走的最远的people最少走多少;若是这样的话就得二分找可行流了,不然的话没有办法建图。(几乎一样的题稍微问了个不一样的东西,就从原本用最大流解变成用费用流解,让我觉得很奇妙)

这里面问的一共最少走多少,那就是费用流了。

#include
#include
#include
#include
#include
#define INF 2e9using namespace std;int T,ans;struct edge{ int v,cap,reverse,cost;};vector
edges[1005];//邻接表 vector
bian;//所有的边都存在里面vector< pair
> people,house;char maze[105][105];void addedge(int u,int v,int cost,int cap){ //u到v一条边,再加一条反向边 edge e; e.cap=cap; e.v=v; e.cost=cost; e.reverse=bian.size()+1;//这条边的反边将建在这条边之后(这条边建完后在bian.size()的位置) bian.push_back(e); edges[u].push_back(bian.size()-1); e.cap=0; e.v=u; e.cost=-cost; e.reverse=bian.size()-1; bian.push_back(e); edges[v].push_back(bian.size()-1);}int dist[1005],pre[1005];//pre[i]代表走的哪条边到的i点 bool spfa(){ for(int i=0;i<=T;i++) dist[i]=INF; for(int i=0;i<=T;i++) pre[i]=-1; deque
q; dist[0]=0; pre[0]=-1; q.push_back(0); while( !q.empty() ){ int u = q.front(); q.pop_front(); for(int i=0;i
0 && dist[u]+e.cost
>n>>m; if(n==0 && m==0) break; bian.clear(); people.clear(); house.clear(); for(int i=0;i<=T;i++) edges[i].clear(); ans=0; //people:1-n house: n+1 - 2*n for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>maze[i][j]; if( maze[i][j]=='H' ) house.push_back( make_pair(i,j) ); else if( maze[i][j]=='m' ) people.push_back( make_pair(i,j) ); } //people向house建边 费用流 for(int i=0;i

 

转载于:https://www.cnblogs.com/ZhenghangHu/p/9526397.html

你可能感兴趣的文章
sql server smo
查看>>
Python递归实现查找下一个素数
查看>>
AngularJs概述
查看>>
Swift Modules for React Native
查看>>
缠中说禅:教你炒股票108课(转载)
查看>>
JavaWeb的编码问题
查看>>
从linux启动到rootfs的挂载分析
查看>>
python 求最大数
查看>>
【R统计】多类别的判别
查看>>
踩坑之mongodb配置文件修改
查看>>
iptables
查看>>
Java泛型和集合之泛型VS模板
查看>>
处理html返回后端内容
查看>>
Consul 介绍
查看>>
数据库 锁机制
查看>>
ADB Android Device Monitor 导出文件错误
查看>>
Codeforces Round #499 (Div. 2) C Fly题解
查看>>
mysql window系统备份远程数据库到本地
查看>>
bzoj3879: SvT
查看>>
Bugzilla使用手册及解决方案
查看>>