最小费用最大流模板(POJ 2135-Farm Tour)
最近正好需要用到最小费用最大流,所以网上就找了这方面的代码,动手写了写,先在博客里存一下~
代码的题目是POJ2135-Farm Tour
需要了解算法思想的,可以参考下面一篇文章,个人觉得有最大流基础的童鞋,看了基本就能看懂了,通俗易懂。
https://www.cnblogs.com/gtarcoder/p/4890739.html
#include <iostream>
#include <string>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm> #define E 50000
#define maxn 1005
#define INF 0x3f3f3f3f
using namespace std;
struct Edge
{
int u,v,flow,cost,next;
}edge[E]; int tot,head[maxn],pre[maxn],dist[maxn],vis[maxn];
int n,m;
void add(int u,int v,int flow,int cost)//flow为流量 cost为费用
{
edge[tot].u=u;
edge[tot].v=v;
edge[tot].flow=flow;
edge[tot].cost=cost;
edge[tot].next=head[u];
head[u]=tot++;
} void addEdge(int u,int v,int flow,int cost){
add(u,v,flow,cost);
add(v,u,,-cost);
} bool SPFA(int s,int t,int n)
{
int v,tmp;
queue<int> q;
for(int i=;i<=n;i++)
{
pre[i]=-;
vis[i]=;
dist[i]=INF;
}
vis[s]=;
dist[s]=;
q.push(s);
while(!q.empty())
{
tmp=q.front();
q.pop();
vis[tmp]=;
for(int k=head[tmp];k!=-;k=edge[k].next)
if(edge[k].flow){
v=edge[k].v;
if(dist[v]>dist[tmp]+edge[k].cost){
dist[v]=dist[tmp]+edge[k].cost;
pre[v]=k; //存储对应的边
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
return dist[t]!=INF;
} int mcmf(int s,int t,int n)
{
int flow=INF,ans=;
while(SPFA(s,t,n))
{
ans+=dist[t];
for(int k=pre[t];k!=-;k=pre[edge[k].u])
flow=min(flow,edge[k].flow);
for(int k=pre[t];k!=-;k=pre[edge[k].u])
{
edge[k].flow-=flow;
edge[k^].flow+=flow;
}
}
return ans;
} void init(){
for(int i=;i<maxn;i++)
head[i]=-;
tot=;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int s=,t=n+;
init();
for(int i=;i<m;i++){
int u,v,c;
scanf("%d %d %d",&u,&v,&c);
addEdge(u,v,,c);
addEdge(v,u,,c);
}
addEdge(s,,,);
addEdge(n,t,,);
int ans=mcmf(s,t,n+);
printf("%d\n",ans);
return ;
}
最小费用最大流模板(POJ 2135-Farm Tour)的更多相关文章
- 网络流(最小费用最大流):POJ 2135 Farm Tour
Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- 最小费用最大流模板 poj 2159 模板水题
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15944 Accepted: 8167 Descr ...
- POJ 2135 Farm Tour (网络流,最小费用最大流)
POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...
- poj 2135 Farm Tour 【无向图最小费用最大流】
题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- HDU3376 最小费用最大流 模板2
Matrix Again Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)To ...
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- POJ 2135 Farm Tour (最小费用最大流模板)
题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...
- POJ 2135.Farm Tour 消负圈法最小费用最大流
Evacuation Plan Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4914 Accepted: 1284 ...
随机推荐
- centos 系统安装基本步骤,面试必考
1.调整开机媒体,通常为cd或者dvd,也可以是u盘. 2.选择安装模式,是否需要图形化 3.语系及键盘语系选择 4.软件选择 5.磁盘分区操作,主+扩展分区最多4个.逻辑分区在扩展分区下建立 6.时 ...
- PAT乙级1009
1009 说反话 (20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干 ...
- 从公司服务器C盘被删说起
事情起因 一个阳(严)光(重)明(雾)媚(霾)的周二,对于我们从周二到周六的班次来说,这是新的一周开始.我像往常一样,打开电脑,倒上一杯水,开始翻阅从大洋彼岸发来的各种邮件.突然看到一封紧急的邮件,内 ...
- MapReduce -- 好友推荐
MapReduce实现好友推荐: 张三的好友有王五.小红.赵六; 同样王五.小红.赵六的共同好友是张三; 在王五和小红不认识的前提下,可以通过张三互相认识,给王五推荐的好友为小红, 给小红推荐的好友是 ...
- 【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试
微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用.它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署.互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效 ...
- 美团热修复Robust的踩坑之旅-使用篇
最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...
- 【OC底层】KVO原理
KVO的原理是什么?底层是如何实现的? KVO是Key-value observing的缩写. KVO是Objective-C是使用观察者设计模式实现的. Apple使用了isa混写(isa-swiz ...
- vue中使用codemirror
https://blog.csdn.net/oumaharuki/article/details/79268498 别人的记载,写的很不错,还有下载的方法 以下是自己使用过的,做出来的例子: 做出来 ...
- docker的简单使用----适用于新手
Docker 1.简介 Docker是一个开源的应用容器引擎 将软件编译成一个镜像:然后在镜像里各种软件做好配置,将镜像发布出去,其他的使用这就可以直接使用这个镜像.运行中的这个镜像叫做容器,容器启动 ...
- 函数的返回值是void
#include <stdio.h> void sub(int x,int y,int z){ z=y-x; } void main() { int a=1,b=2,c=3; sub(10 ...