问题

分析

还是构图,为了让两条路径没有公共点,所以将除了1,v外的其他点拆分成两个点,一个点上连接原来的入弧,另一个点连接出弧,然后两个点之间连接一条容量1,费用为0的边,这样就能够保证只有1个流量经过这个点,如果两个流量在此点重合,那么一定有一个不能出去,所以可以使用最大流最小费用算法求解

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <utility>
#include <map>
#include <string>
#include <queue>
using namespace std;
const int maxn=2005,Inf=0x3f3f3f3f;struct Edge{int from,to,cap,flow,cost;Edge(int u,int v,int cap,int flow,int cost):from(u),to(v),cap(cap),flow(flow),cost(cost){}
};struct MCMF{int n,m;vector<Edge> edges;vector<int> G[maxn];int a[maxn];int p[maxn];int d[maxn];  //bellman-fordint inq[maxn];  //是否在队列中void init(int n){this->n=n;for(int i=0;i<n;++i) G[i].clear();edges.clear();}void AddEdge(int from,int to,int cap,int cost){edges.push_back(Edge(from,to,cap,0,cost));edges.push_back(Edge(to,from,0,0,-cost));m=edges.size();G[from].push_back(m-2);G[to].push_back(m-1);}bool BellmanFord(int s,int t,int &flow,long long &cost){for(int i=0;i<n;++i) d[i]=Inf;memset(inq,0,sizeof(inq));p[s]=0; a[s]=Inf;  d[s]=0; inq[s]=1;queue<int> Q;Q.push(s);while(!Q.empty()){int x=Q.front();Q.pop();inq[x]=0;for(int i=0;i<G[x].size();++i){Edge &e=edges[G[x][i]];if(d[e.to]>d[x]+e.cost && e.cap>e.flow){d[e.to]=d[x]+e.cost;p[e.to]=G[x][i];a[e.to]=min(a[x],e.cap-e.flow);if(!inq[e.to]){inq[e.to]=1;Q.push(e.to);}}}}if(d[t]==Inf) return false;flow+=a[t];cost+=(long long)d[t]*a[t];for(int u=t;u!=s;u=edges[p[u]].from){edges[p[u]].flow+=a[t];edges[p[u]^1].flow-=a[t];}return true;}int MincostFlow(int s,int t,long long &cost){int flow=0;cost=0;while(flow<2 && BellmanFord(s,t,flow,cost));return flow;}
};int n,m,a,b,c;
MCMF mcmf;
int main(void){while(scanf("%d%d",&n,&m)==2){int t=2*n;mcmf.init(t);//将每个点拆成两个点,入点和出点  入点编号2~n-1,出点标号n+1~2*n-2//新加入一个点0,0和点1之间有边,容量是2,费用是0mcmf.AddEdge(0,1,2,0);for(int i=2;i<n;++i) mcmf.AddEdge(i,n-1+i,1,0);for(int i=0;i<m;++i){scanf("%d%d%d",&a,&b,&c);if(a!=1 && a!=n) a=n-1+a;mcmf.AddEdge(a,b,1,c);}long long cost=0;mcmf.MincostFlow(0,n,cost);printf("%lld\n",cost);}return 0;
}

Admiral UVA - 1658相关推荐

  1. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  2. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  3. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  5. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  6. UVa 11174 - Stand in a Line

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

  7. UVa 10112 - Myacm Triangles

    UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...

  8. UVa 10180 - Rope Crisis in Ropeland!

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...

  9. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

最新文章

  1. python检索字符串_python查找字符串所有子串
  2. libcurl下载限速编程调研
  3. bat脚本登陆ftp服务器
  4. c#调用cmd执行相关命令
  5. 通过maven创建自己的archetype
  6. How is syntax error in Vue detected - Vue的语法错误检查机制介绍
  7. 网站前端组织冒泡事件
  8. Android内核学习笔记
  9. [INS-30131] 执行安装程序验证所需的初始设置失败。
  10. SQL过滤字符后手工注入漏洞测试(第1题)
  11. 时刻记住要做合格的程序员——一次高性能程序设计实验课后的反思
  12. 关于Demo3D中的Random
  13. 时光倒流软件测试简历,时光倒流 28款数据恢复软件大比拼
  14. 利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值
  15. java sub_java调用zeromq PUB-SUB模式
  16. 巡检设备RFID技术应用浅析
  17. wow 如何写dz 宏
  18. stm32F407的串口6卡死问题
  19. 【autojs】Auto.js Pro免root打开无障碍服务(需adb授权,重启手机不失效)脚本源代码
  20. 数字IC前端面试常见问题整理

热门文章

  1. erdas叠加显示_利用erdas对遥感影像进行分类具体步骤
  2. 腾讯云什么是IP,如何更换公网IP以及可更换次数
  3. ffmpeg yasm not found, use --disable-yasm for a crippled build
  4. nginx(一)介绍安装
  5. 【操作系统笔记(四)】CPU管理的核心:多进程图像
  6. 数学建模推国一最终省一经验总结
  7. 【分享贴】I2C无法访问ATEC508A加密芯片问题
  8. python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
  9. Docker笔记-04 仓库
  10. EasyExcel 中文文档