POJ2135 最小费用最大流模板题
练练最小费用最大流
此外此题也是一经典图论题
题意:找出两条从s到t的不同的路径,距离最短。
要注意:这里是无向边,要变成两条有向边
#include <cstdio>
#include <cstring>
#define MAXN 1005
#define MAXM 10005
#define INF 0x3f3f3f3f struct Edge
{
int y,c,w,ne;//c容量 w费用
}e[MAXM*]; int n,m,x,y,w;
int s,t,Maxflow,Mincost;
int all,be[MAXN];
int q[MAXM*],dis[MAXN],pre[MAXN];//pre存的是当前点的前边
bool vis[MAXN]; void add(int x, int y, int c, int cost)
{
e[all].y=y;e[all].c=c;e[all].w=cost;
e[all].ne=be[x];
be[x]=all++;
e[all].y=x;e[all].c=;e[all].w=-cost;//反向边费用取负
e[all].ne=be[y];
be[y]=all++;
} void init()
{
all=;
memset(be,-,sizeof(be));
}
bool spfa(int s, int t)
{
for(int i=; i<MAXN; i++)
{
dis[i]=INF;
vis[i]=;
pre[i]=-;
}
dis[s]=;
vis[s]=;
int head=,tail=;
q[++tail]=s;
while(head<tail)
{
int u=q[++head];
vis[u]=;
for(int i=be[u]; i!=-; i=e[i].ne)
{
int v=e[i].y;
if(e[i].c> && dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
pre[v]=i;
if(!vis[v])
{
vis[v]=;
q[++tail]=v;
}
}
}
}
if(pre[t]==-) return ;
return ;
}
void MincostMaxflow(int s, int t)
{
Maxflow=;
Mincost=;
while(spfa(s,t))
{
int minc=INF;
for(int i=pre[t]; i!=-; i=pre[e[i^].y])
if(minc>e[i].c) minc=e[i].c;
for(int i=pre[t]; i!=-; i=pre[e[i^].y])
{
e[i].c-=minc;
e[i^].c+=minc;
Mincost+=e[i].w*minc;
}
Maxflow+=minc;
}
} int main()
{
scanf("%d%d",&n,&m);
init();
s=n+;
t=n+;
for(int i=; i<m; i++)
{
scanf("%d%d%d",&x,&y,&w);
add(x,y,,w);
add(y,x,,w);
}
add(s,,,);
add(n,t,,);
MincostMaxflow(s,t);
printf("%d\n",Mincost);
return ;
}
POJ2135 最小费用最大流模板题的更多相关文章
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- 2018牛客网暑期ACM多校训练营(第五场) E - room - [最小费用最大流模板题]
题目链接:https://www.nowcoder.com/acm/contest/143/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- [POJ2135]最小费用最大流
一直由于某些原因耽搁着...最小费用最大流没有搞会. 今天趁着个人状态正佳,赶紧去看看,果然30min不到看会了算法+模板并且A掉了一道题. 感觉最小费用最大流在学过了最大流之后还是挺好理解的.找到从 ...
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- 图论算法-最小费用最大流模板【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 ...
- poj2135最小费用最大流经典模板题
Farm Tour Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13509 Accepted: 5125 Descri ...
- POJ-2135 Farm Tour---最小费用最大流模板题(构图)
题目链接: https://vjudge.net/problem/POJ-2135 题目大意: 主人公要从1号走到第N号点,再重N号点走回1号点,同时每条路只能走一次. 这是一个无向图.输入数据第一行 ...
随机推荐
- C# Windows - 菜单栏和工具栏
除了MenuStrip控件之外,还有许多控件可用于填充菜单.3个常见的控件是ToolStripMenuItem,ToolStripDropDown,和ToolStripSeparator.这些控件表示 ...
- win7下Chrome有两个图标的解决方法
摘抄自:http://www.sevenforums.com/browsers-mail/238406-windows-7-taskbar-creating-double-google-chrome- ...
- sqlserver 类似oracle的rownum功能: row_number
select row_number() over(order by t.id ) as num,id,name from (SELECT distinct [列 0] as id ,[列 1] as ...
- 常用sqlserver语句
1.查看表上的索引 sp_helpIndex [表名] --查询表上拥有的索引 2.更新其它表 update 申请信息set 研发部门='123',版本信息='321'where 单号=(selec ...
- 【BZOJ】【1391】【CEOI2008】order
网络流/最小割 暴力建图就好了……S->i 容量为收益,i->j+n 容量为租金,j+n->T容量为购买所花的钱. 如果亏钱的话那么割掉的就是收益,表示不赚钱. 如果租金大于购买所花 ...
- isEmpty()与equals()、==“”区别
isEmpty方法源码:public static boolean isEmpty(String str) { return (str == null) || (str.length() == 0); ...
- PHP字符串函数之 strstr stristr strchr strrchr
strstr -- 查找字符串的首次出现,返回字符串从第一次出现的位置开始到该字符串的结尾或开始. stristr -- strstr 函数的忽略大小写版本 strchr -- strstr 函数的别 ...
- hdoj 1879 继续畅通工程
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 【POJ3243】拓展BSGS(附hash版)
上一篇博文中说道了baby step giant step的方法(简称BSGS),不过对于XY mod Z = K ,若x和z并不互质,则不能直接套用BSGS的方法了. 为什么?因为这时候不存在逆元了 ...
- Java 编译错误:缺少返回语句
示例: import java.util.*; import java.io.*; public class tt { public static void main(String[] args) { ...