【题意】给出一张无向图,从1开始到n,求两条没有公共边的最短路,使得路程总和最小


每条边的权值设为费用,最大流量设为1,然后就是从源点到汇点流量为2的最小费用流。

因为是规定了流量,新建一个源点和一个汇点,源点到结点1连一条最大流量为2,费用为0的边,结点N到汇点连一条最大流量为2,费用为0的边,这样就规定好流量了。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,ans,big,cas,num,w,t,u,v,S,T;
bool flag; int head[MAXN],vis[MAXN],dis[MAXN],pos[MAXN],Edge,size;
char s[305][305];
struct edgenode
{
int to,next,w,cost;
} edge[MAXM]; void add_edge(int x,int y,int w,int cost)
{
edge[Edge].to=y;
edge[Edge].w=w;
edge[Edge].cost=cost;
edge[Edge].next=head[x];
head[x]=Edge;
Edge++; edge[Edge].to=x;
edge[Edge].w=0;
edge[Edge].cost=-cost;
edge[Edge].next=head[y];
head[y]=Edge;
Edge++;
} bool SPFA(int s, int t)
{
int u,v,i;
queue <int> q;
memset(vis,0,sizeof(vis));
for(i=0;i<size;i++) dis[i]=INF;
dis[s]=0;
vis[s]=1;
q.push(s);
while(!q.empty())
{
u=q.front(); q.pop(); vis[u]=0;
for (i=head[u];i!=-1;i=edge[i].next)
{
v=edge[i].to;
if(edge[i].w>0&&dis[u]+edge[i].cost<dis[v])
{
dis[v]=dis[u]+edge[i].cost;
pos[v]=i;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
return dis[t]!=INF;
}
int MinCostFlow(int s,int t)
{
int i,cost=0,flow=0;
while(SPFA(s,t))
{
int d=INF;
for (i=t;i!=s;i=edge[pos[i]^1].to)
{
d=min(d,edge[pos[i]].w);
}
for(i=t;i!=s;i=edge[pos[i]^1].to)
{
edge[pos[i]].w-=d;
edge[pos[i]^1].w+=d;
}
flow+=d;
cost+=dis[t]*d;
}
return cost; // flow是最大流值
} int main()
{
memset(head,-1,sizeof(head));Edge=0;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&t);
add_edge(x,y,1,t);
add_edge(y,x,1,t);
}
S=0;T=n+1;
size=n+2;
add_edge(S,1,2,0);
add_edge(n,T,2,0);
printf("%d\n",MinCostFlow(S,T));
return 0;
}

  

【网络流#9】POJ 2135 Farm Tour 最小费用流 - 《挑战程序设计竞赛》例题的更多相关文章

  1. POJ 2135 Farm Tour 最小费用流

    两条路不能有重边,既每条边的容量是1.求流量为2的最小费用即可. //#pragma comment(linker, "/STACK:1024000000,1024000000") ...

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

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

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

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

  4. 网络流(最小费用最大流):POJ 2135 Farm Tour

    Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...

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

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

  6. POJ 2135.Farm Tour 消负圈法最小费用最大流

    Evacuation Plan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4914   Accepted: 1284   ...

  7. POJ 2135 Farm Tour(最小费用最大流)

    Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...

  8. POJ 2135 Farm Tour (费用流)

    [题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...

  9. POJ 2135 Farm Tour

    题目大意:有一个无向图..农夫从1号点出发..要到达N号点..然后回到1号点..来回不能走相同的路径..问最短的距离是多少. 题解:又是不能走重复路径!基本图论算法直接扔掉上网络流.不能相同就边限1, ...

随机推荐

  1. [转]Java远程方法调用

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

  2. 简洁的MysqlHelper

    把MySqlXXX的类更改为SqlXXX就可以成为sqlHelper. 另外C#也提供了MysqlHelper和sqlHelper,用起来也挺方便的. public class MySqlHelper ...

  3. ExtJS智能提示工具spket安装与破解

    用myeclipse写java程序,最怕的是什么呢,写javascript代码,原因很简单,没有智能提示,ExtJS是完全js代码的界面库,写起来就更痛苦了,幸好有人做了spket插件,此文采用傻瓜式 ...

  4. (转)你知道Android也有安全模式吗?(地球人都知道了吧)

    使用PC时,我们习惯在安全模式下解决驱动的各种兼容性问题.而你是否又知道,Android手机同样存在安全模式,帮你解决APP的各种冲突问题. 很多Android手机用户都遇到过下面这种极端情况:因为第 ...

  5. .net别样外观控件包DotNetBar

    内容介绍:http://www.componentcn.com/?thread-6423-1.html BubbleBar应用: BubbleBar, DevComponents.    Namesp ...

  6. html中插入flash代码详解(转载)

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://down ...

  7. 如何去除 ckeditor 上传图片后在原码中留下的 style="width: 100%;height:100px"之类的代码呢?

    ckeditor编辑器在上传图片的时候,会神奇的加上一段诡异的代码: 这导致上传的小图也是被拉伸到100%,我根本就没有定义它,找来找去也找不到element.style,原来这是在system.cs ...

  8. codeforces 235 B. Let's Play Osu!

    You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. F ...

  9. a标签的 target 使用

    <a target="_blank" href="www.baidu.com" onclick="return test()"> ...

  10. How Many Points of Intersection?

    uva10790:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...