题意:有个N个点M个边的有向加权图,求1~N的两条不相交路径(除了起点和终点外没有公共点),使得权和最小。

解法:不相交?也就是一个点只能经过一次,也就是我后面博文会讲的“结点容量问题”。(呃不,写完这博文几天后的今天,我负责任地 m(._.)m 告诉大家,我不会写这博文了......我的时间不多了......          m(_ _;;m 大家可以看蓝书。)常用方法就是拆点法,把一个点拆成两个点,中间连一条容量为1、费用为0的边。于是求1到 n 的流量为2的最小费用流就可以了。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<queue>
6 using namespace std;
7
8 const int N=1010,M=10010,NN=2010,MM=22000,D=110,INF=(int)1e9;
9 int n,m,len;
10 int last[NN],d[NN],vis[NN],flow[NN];
11 int pre[NN],id[NN];
12 struct edge{int x,y,fl,c,next;}e[MM];
13 queue<int> q;
14
15 int mmin(int x,int y) {return x<y?x:y;}
16 void ins(int x,int y,int fl,int c)
17 {
18 e[++len].x=x,e[len].y=y,e[len].fl=fl,e[len].c=c;
19 e[len].next=last[x],last[x]=len;
20 e[++len].x=y,e[len].y=x,e[len].fl=0,e[len].c=-c;
21 e[len].next=last[y],last[y]=len;
22 }
23 bool spfa(int st,int ed)
24 {
25 while (!q.empty()) q.pop();
26 memset(d,63,sizeof(d));//>1e9
27 memset(vis,0,sizeof(vis));
28 memset(pre,0,sizeof(pre));
29 q.push(st);
30 d[st]=0,vis[st]=1,flow[st]=INF;
31 while (!q.empty())
32 {
33 int x=q.front(); q.pop();
34 vis[x]=0;//spfa
35 for (int i=last[x];i;i=e[i].next)
36 {
37 int y=e[i].y;
38 if (d[x]+e[i].c<d[y] && e[i].fl)
39 {
40 d[y]=d[x]+e[i].c;
41 flow[y]=mmin(flow[x],e[i].fl);
42 pre[y]=x, id[y]=i;
43 if (!vis[y]) q.push(y),vis[y]=1;
44 }
45 }
46 }
47 return pre[ed];
48 }
49 int Max_flow(int st,int ed)
50 {
51 int sum=0;
52 while (spfa(st,ed))
53 {
54 sum+=flow[ed]*d[ed];
55 for (int i=ed;i!=st;i=pre[i])
56 {
57 e[id[i]].fl-=flow[ed];
58 e[id[i]^1].fl+=flow[ed];
59 }
60 }
61 return sum;
62 }
63 int main()
64 {
65 while (scanf("%d%d",&n,&m)!=EOF)
66 {
67 int x,y,z; len=1;
68 memset(last,0,sizeof(last));
69 for (int i=2;i<n;i++) ins(i,n+i-1,1,0);
70 ins(n,2*n-1,2,0);
71 //拆点就是真的拆点不能ins(i,i...) n+1~2n-2
72 for (int i=1;i<=m;i++)
73 {
74 scanf("%d%d%d",&x,&y,&z);
75 if (x!=1) x=n+x-1;//只有1没有拆多一个点
76 ins(x,y,1,z);
77 }
78 //for (int i=2;i<=len;i++)
79 // printf("%d %d %d %d %d\n",e[i].x,e[i].y,e[i].fl,e[i].c,e[i].next);
80 int ans=Max_flow(1,2*n-1);
81 printf("%d\n",ans);
82 }
83 return 0;
84 }

【uva 1658】Admiral(图论--网络流 最小费用最大流)的更多相关文章

  1. UVA 1658 海军上将(拆点法+最小费用限制流)

    海军上将 紫书P375 这题我觉得有2个难点: 一是拆点,要有足够的想法才能把这题用网络流建模,并且知道如何拆点. 二是最小费用限制流,最小费用最大流我们都会,但如果限制流必须为一个值呢?比如这题限制 ...

  2. 【bzoj 2597】[Wc2007]剪刀石头布(图论--网络流 最小费用最大流)

    题目:在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道于统计有多少这样的 ...

  3. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

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

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

  5. HDU 6118 度度熊的交易计划(网络流-最小费用最大流)

    度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但 ...

  6. 网络流--最小费用最大流MCMF模板

    标准大白书式模板 #include<stdio.h> //大概这么多头文件昂 #include<string.h> #include<vector> #includ ...

  7. 洛谷P4003 [国家集训队2017]无限之环 网络流 最小费用最大流

    题意简述 有一个\(n\times m\)棋盘,棋盘上每个格子上有一个水管.水管共有\(16\)种,用一个\(4\)位二进制数来表示当前水管向上.右.下.左有个接口.你可以旋转除了\((0101)_2 ...

  8. POJ-2516-Minimum Cost(网络流, 最小费用最大流)

    链接: https://vjudge.net/problem/POJ-2516 题意: Dearboy, a goods victualer, now comes to a big problem, ...

  9. Minimum Cost 【POJ - 2516】【网络流最小费用最大流】

    题目链接 题意: 有N个商家它们需要货物源,还有M个货物供应商,N个商家需要K种物品,每种物品都有对应的需求量,M个商家每种物品都是对应的存货,然后再是K个N*M的矩阵表示了K个物品从供货商运送到商家 ...

随机推荐

  1. 对于k8s微服务的性能测试监控平台搭建

    之前有写过对于传统项目的性能测试监控,但是对于目前市场占比已经很低,大部分项目使用k8s,今天讲一下对于k8s如何去监控. 对于k8s的监控我们所有的操作都要在master下进行. 一.部署grafa ...

  2. MySQL where 条件字句查询

    where 条件字句 搜索条件可由一个或多个逻辑表达式组成 , 结果一般为布尔值 逻辑运算符 运算符 语法 描述 and && a and b a && b 逻辑与 两 ...

  3. 【Linux】Linux下如何分区及如何格式化

    环境:CentOS7.1 磁盘大小是1.8T 将磁盘/dev/sda分一个分区,分区类型为xfs fdisk /dev/sda n    --创建新分区 p  --创建分区类型为主分区 1  --主分 ...

  4. 在recover database时,如何决定该从哪一个SCN开始恢复

    使用备份恢复的方法搭建DG库,还原数据文件后,打开数据库时报错 SQL> ALTER DATABASE OPEN READ ONLY; ALTER DATABASE OPEN READ ONLY ...

  5. BAPI创建PO,禁止净价信息更新

    大家都知道创建PO时,我们如果勾选了"信息更新",则该PO保存后相应的信息记录会把这个PO更新为其最后的凭证,那么这张PO的净价会作为下次创建新PO时净价的默认值. 这样我们设置的 ...

  6. 容器编排系统K8s之包管理器helm基础使用(二)

    前文我们介绍了helm的相关术语和使用helm安装和卸载应用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14305902.html:今天我们来介绍下自定义 ...

  7. 消息队列之kafka

    消息队列之activeMQ 消息队列之RabbitMQ 1.kafka介绍 kafka是由scala语言开发的一个多分区,多副本的并且居于zookeeper协调的分布式的发布-订阅消息系统.具有高吞吐 ...

  8. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript Enriching Events(丰富事件信息)

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  9. 用APICloud开发iOS App Clip详细教程

    App Clip是苹果公司在WWDC20开发者大会上发布的新功能,用户可以只访问应用程序的一小部分,而无需下载整个应用,被称为苹果小程序.本文主要介绍如何通过APICloud开发App Clip. 一 ...

  10. uni-app开发经验分享五: 解决三端页面兼容问题的方法

    在做uni-app开发的过程中,我们最头疼可能不是开发的过程中的逻辑,而是最后要做的三端兼容测试和修改,在我开发的项目中,这一步都是最头疼和令人头秃的过程,这里总结一些个人开发遇到的问题,希望对大家有 ...