最小费用最大流模板(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 ...
随机推荐
- gitblit server windows搭建
环境配置: windows64bit 系统 jdk1.8安装配置环境变量,这个不说了百度有 gitblit官网下载对应操作系统位数64bit包解压:http://www.gitblit.com/ ...
- 如何将freemarker文件转化为html文件
最近在做静态的页面报表服务,将前端生成的ftl文件转化为html格式的文件,供后面合成pdf使用. freemarker基础可以参见:freemarker官方文档 前期准备:需要一个基础的ftl格式的 ...
- Maven/Ant的安装(Win10 x64)
一.Maven安装 1.官网下载安装包,http://maven.apache.org/download.cgi. 2.安装包解压到某一目录,然后配置maven的环境变量. PS:也可以不配置环境变量 ...
- C++中的随机函数
一.random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过. 可改用C++下的rand函数来实现. 1.C++标准函数库提供一随机数生成器rand,返回0-RAND_MA ...
- The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does not exist.
The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does no ...
- iOS开发用如何用类"SKStoreProductViewController"跳转AppStore点赞评分?
大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的. 目前,AppStore点赞评分有两种方法,一 ...
- MySQL添加、删除索引
1.索引类型 UNIQUE(唯一索引):不可以出现相同的值,可以有NULL值: INDEX(普通索引):允许出现相同的索引内容: PROMARY KEY(主键索引):不允许出现相同的值: fullte ...
- ruby的循环使用及区别(for、each等)
ruby的循环有以下几种: times方法 for语句 while语句 until语句(与while相反) each方法(与for极度相似,在ruby内部,for语句是用each实现的) loop方法 ...
- 菜鸟成长心酸史之php初遇教程
phpstorm是我接触到的第二个制作网页的程序,刚拿到php的时候,我是懵逼的,从安装到使用,可以说一点都不会,尤其是它还要配合wampsever使用,即使看视频,不同的制作php的软件也有不同的地 ...
- http://browniefed.com/blog/2015/09/10/the-shapes-of-react-native/
http://browniefed.com/blog/2015/09/10/the-shapes-of-react-native/