题目大意:

给定一个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模板的更多相关文章

  1. hdu 6437 /// 最小费用最大流 负花费 SPFA模板

    题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...

  2. POJ - 2135最小费用流

    题目链接:http://poj.org/problem?id=2135 今天学习最小费用流.模板手敲了一遍. 产生了一个新的问题:对于一条无向边,这样修改了正向边容量后,反向边不用管吗? 后来想了想, ...

  3. POJ 2135 简单费用流

    题意:       题意是一个人他要从牧场1走到牧场n然后在走回来,每条路径只走一次,问全程的最短路径是多少. 思路:        这个题目挺简单的吧,首先要保证每条边只能走一次,然后还要要求费用最 ...

  4. poj 2135 (基础费用流)

    题意:从1到n再到1,每条边只能走一次,求最短距离. 建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0: 求增广路用SPFA最短路求,, #in ...

  5. POJ 2135 Farm Tour (网络流,最小费用最大流)

    POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...

  6. POJ 2135 Farm Tour (最小费用最大流模板)

    题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...

  7. poj 2135 Farm Tour 【无向图最小费用最大流】

    题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...

  8. [实变函数]5.2 非负简单函数的 Lebesgue 积分

    1 设        $$\bex        \phi(x)=\sum_{i=1}^j c_i\chi_{E_i}(x),\quad c_i\geq 0,        \eex$$ 其中     ...

  9. [实变函数]5.3 非负可测函数的 Lebesgue 积分

    本节中, 设 $f,g,f_i$ 是可测集 $E$ 上的非负可测函数, $A,B$ 是 $E$ 的可测子集.       1 定义: (1) $f$ 在 $E$ 上的 Lebesgue 积分      ...

随机推荐

  1. python学习笔记:itsdangerous模块

    使用itsdangerous生成临时身份令牌 安装 pip install itsdangerous 使用 import itsdangerous salt='sdaf'#加盐 t=itsdanger ...

  2. QT5.2 Assistant-设置应用程序图标

       在Qt助手(assistant.exe)搜索关键字"Setting the Application Icon"就可以看到在各种平台设置Qt程序图标的方法,包括QT支持的Win ...

  3. linux命令du

    du log2012.log 查看文件大小 du -sh *   当前目录所有文件的大小 du|sort -nr|more 按照空间大小排序 du -c log30.tar.gz log31.tar. ...

  4. Anjular的ng-repeat

    Anjular的ng-repeat不会循环一个二维集合中的一维集合.举个例子:集合 list=  {1,2,{0,1,2},23,222},small={0,1,2},使用ng-repeat" ...

  5. vue做一个上移和下移,删除的li 功能

    效果图: 思路就是冒泡原理,把数据放到一个空数组,对其进行排序, 单选框用到的是iview . 具体实现代码: <div v-for="item in singledLists&quo ...

  6. 【WPF】一些拖拽实现方法的总结(Window,UserControl)

    原文:[WPF]一些拖拽实现方法的总结(Window,UserControl) 原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文 ...

  7. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  8. JS提示信息来检测相应id的标签

    2015-07~2015-08 (其中$为document.getElementById()) 使用span提示信息来检测相应id的标签,没有返回值 infoTips("LRYH" ...

  9. ICPC2008哈尔滨-E-Gauss Elimination

    题目描述 Li Zhixiang have already been in “Friendship” ocean-going freighter for three months. The excit ...

  10. Python新建文件夹

    import os os.mkdir('OS-Demo-2') os.makedirs('OS-Demo-3/sub-Dir-1') os.mkdir()和os.makedirs()都可以新建文件夹, ...