POJ 2135 /// 最小费用流最大流 非负花费 BellmanFord模板
题目大意:
给定一个n个点m条边的无向图
求从点1去点n再从点n回点1的不重叠(同一条边不能走两次)的最短路
挑战P239
求去和回的两条最短路很难保证不重叠
直接当做是由1去n的两条不重叠的最短路
这样就变成了由1去n流量为2的最小费用流
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N=;
int n,m;
struct EDGE { int v,w,c,r; };
vector <EDGE> E[N];
void addE(int u,int v,int w,int c) {
E[u].push_back((EDGE){v,w,c,E[v].size()});
E[v].push_back((EDGE){u,,-c,E[u].size()-});
}
int dis[N], pv[N] ,pe[N];
int minCFlow(int s,int t,int f) {
int res=;
while(f>) {
/// Bellman-Ford求s到t最短路
memset(dis,INF,sizeof(dis));
memset(pv,,sizeof(pv));
dis[s]=;
bool upD=;
while(upD) {
upD=;
for(int i=;i<=n;i++) { // 通过i点
if(dis[i]==INF) continue;
for(int j=;j<E[i].size();j++) { // 更新E[i][j]点的最短路
EDGE& e=E[i][j];
if(e.w> && dis[e.v]>dis[i]+e.c) { // 边容量>0才能走
dis[e.v]=dis[i]+e.c; // 找到更短的路 更新
pv[e.v]=i, pe[e.v]=j; // 记录前驱点及边 便于通过e.v找到i点
upD=;
}
}
}
}
if(dis[t]==INF) return -; // s不能到t 不能增广 int d=f; // 找到本轮实际能够流出的流量(即实际用掉的容量)
for(int i=t;pv[i];i=pv[i])
d=min(d,E[pv[i]][pe[i]].w);
f-=d; // 容量消耗
res+=d*dis[t]; // 计算本轮花费
for(int i=t;pv[i];i=pv[i]) {
EDGE& e=E[pv[i]][pe[i]];
e.w-=d;
E[i][e.r].w+=d;
} // 更新边的容量
}
return res;
}
int main()
{
while(~scanf("%d%d",&n,&m)) {
int s=, t=n;
for(int i=;i<m;i++) {
int u,v,c; scanf("%d%d%d",&u,&v,&c);
addE(u,v,,c); addE(v,u,,c);
// 建立u到v容量大小为1费用为c的边
}
printf("%d\n",minCFlow(s,t,));
// 求s到t传输大小为2(即最大容量为2)的最小费用流
} return ;
}
POJ 2135 /// 最小费用流最大流 非负花费 BellmanFord模板的更多相关文章
- hdu 6437 /// 最小费用最大流 负花费 SPFA模板
题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...
- POJ - 2135最小费用流
题目链接:http://poj.org/problem?id=2135 今天学习最小费用流.模板手敲了一遍. 产生了一个新的问题:对于一条无向边,这样修改了正向边容量后,反向边不用管吗? 后来想了想, ...
- POJ 2135 简单费用流
题意: 题意是一个人他要从牧场1走到牧场n然后在走回来,每条路径只走一次,问全程的最短路径是多少. 思路: 这个题目挺简单的吧,首先要保证每条边只能走一次,然后还要要求费用最 ...
- poj 2135 (基础费用流)
题意:从1到n再到1,每条边只能走一次,求最短距离. 建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0: 求增广路用SPFA最短路求,, #in ...
- 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 (最小费用最大流模板)
题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...
- poj 2135 Farm Tour 【无向图最小费用最大流】
题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...
- [实变函数]5.2 非负简单函数的 Lebesgue 积分
1 设 $$\bex \phi(x)=\sum_{i=1}^j c_i\chi_{E_i}(x),\quad c_i\geq 0, \eex$$ 其中 ...
- [实变函数]5.3 非负可测函数的 Lebesgue 积分
本节中, 设 $f,g,f_i$ 是可测集 $E$ 上的非负可测函数, $A,B$ 是 $E$ 的可测子集. 1 定义: (1) $f$ 在 $E$ 上的 Lebesgue 积分 ...
随机推荐
- Java拦截过滤器模式
当我们想要对应用程序的请求或响应进行一些预处理/后处理时,使用截取过滤器设计模式. 在将请求传递到实际目标应用程序之前,在请求上定义和应用过滤器. 过滤器可以进行请求的认证/授权/日志记录或跟踪,然后 ...
- sublime推荐插件
SyncedSidebarBg:侧边栏底色统一 Emmet:集合多种功能,大名鼎鼎的 Zen coding ==> 不过对于嵌入式的我没多大用啊 Sublime CodeIntel:代码提示 A ...
- bzoj4550 小奇的博弈
我看出了是个 Nimk 问题.... dp我明白意思,我也会推组合数.... 但是...神tm统计答案啊...蒟蒻不会~
- android 批量加载数据
public class MainActivity extends Activity { private ListView listView; private List<String> d ...
- Nginx基础优化
Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...
- Comet OJ - contest #3 C DP
题意:给你一个长度为n序列,和一个数m,问这个序列有多少个子序列,满足这个子序列的所有子序列的和是m的倍数?答案对1e9 + 7取模,n, m范围到5e3; 思路:容易发现,如果一个子序列的长度是n, ...
- 2、Python 基础类型 -- String 字符串类型
字符串常用的方法: 1.分割:string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num 有指 ...
- spark代码写入hdfs错误
报错: org.apache.hadoop.security.AccessControlException: Permission denied: user=hgm, access=WRITE 其实就 ...
- spring事件监听(eventListener)
原理:观察者模式 spring的事件监听有三个部分组成,事件(ApplicationEvent).监听器(ApplicationListener)和事件发布操作. 事件 事件类需要继承Applicat ...
- 【LeetCode 23】合并K个排序链表
题目链接 [题解] 会归并排序吧? 就把这K个链表当成是K个数字就好. 然后做归并排序. 因为归并排序的时候本来就会有这么一个过程. [l..mid]和[mid+1..r]这两段区间都是有序的了已经. ...