【uva 1658】Admiral(图论--网络流 最小费用最大流)
题意:有个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(图论--网络流 最小费用最大流)的更多相关文章
- UVA 1658 海军上将(拆点法+最小费用限制流)
海军上将 紫书P375 这题我觉得有2个难点: 一是拆点,要有足够的想法才能把这题用网络流建模,并且知道如何拆点. 二是最小费用限制流,最小费用最大流我们都会,但如果限制流必须为一个值呢?比如这题限制 ...
- 【bzoj 2597】[Wc2007]剪刀石头布(图论--网络流 最小费用最大流)
题目:在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道于统计有多少这样的 ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 网络流(最小费用最大流):POJ 2135 Farm Tour
Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- HDU 6118 度度熊的交易计划(网络流-最小费用最大流)
度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但 ...
- 网络流--最小费用最大流MCMF模板
标准大白书式模板 #include<stdio.h> //大概这么多头文件昂 #include<string.h> #include<vector> #includ ...
- 洛谷P4003 [国家集训队2017]无限之环 网络流 最小费用最大流
题意简述 有一个\(n\times m\)棋盘,棋盘上每个格子上有一个水管.水管共有\(16\)种,用一个\(4\)位二进制数来表示当前水管向上.右.下.左有个接口.你可以旋转除了\((0101)_2 ...
- POJ-2516-Minimum Cost(网络流, 最小费用最大流)
链接: https://vjudge.net/problem/POJ-2516 题意: Dearboy, a goods victualer, now comes to a big problem, ...
- Minimum Cost 【POJ - 2516】【网络流最小费用最大流】
题目链接 题意: 有N个商家它们需要货物源,还有M个货物供应商,N个商家需要K种物品,每种物品都有对应的需求量,M个商家每种物品都是对应的存货,然后再是K个N*M的矩阵表示了K个物品从供货商运送到商家 ...
随机推荐
- 【JavaWeb】书城项目
书城网站 项目说明 项目地址 阶段一 登录.注册的验证 使用 jQuery 技术对登录中的用户名.密码进行非空验证: 使用 jQuery 技术和正则表达式对注册中的用户名.密码.确认密码.邮箱进行格式 ...
- LeetCode116 每个节点的右向指针
给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...
- 在阿里云托管的k8s上使用nas做动态存储
前言 关于aliyun托管k8s的存储插件主要有两种: CSI # kubectl get pod -n kube-system | grep csi-plugin csi-plugin-8bbnw ...
- 你都用过SpringCloud的哪些组件,它们的原理是什么?
前言 看到文章的题目了吗?就是这么抽象和笼统的一个问题,确实是我面试中真实被问到的,某共享货车平台的真实面试问题. SpringCloud确实是用过,但是那是三四年前了,那个时候SpringCloud ...
- 在 Azure 上执行一些简单的 python 工作
1. 公司禁用了 python 我的主业是桌面开发,偶尔也需要搞搞数据和算法.最近在用 python 处理一些工作,正搞得热火朝天,突然 python 就不能用了,一查记录原来是 IT 管理员禁止我使 ...
- ctfhub技能树—文件上传—00截断
什么是00截断 相关教程:http://www.admintony.com/%E5%85%B3%E4%BA%8E%E4%B8%8A%E4%BC%A0%E4%B8%AD%E7%9A%8400%E6%88 ...
- [Usaco2008 Mar]Cow Travelling游荡的奶牛
题目描述 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John在某个时刻看见 ...
- Nginx配置代理gRPC的方法
Nginx配置代理gRPC的方法_nginx_脚本之家 https://www.jb51.net/article/137330.htm
- 日记 + sb错误
置顶消息cpdd 1.29 完了,文化课没了 我是废物 1.28 更新了自己的副标题 前副标题:Future never has to do with past time,but present ti ...
- Language Guide (proto3) | proto3 语言指南(开篇)
前言 近日在学习gRPC框架的相关知识时接触到Protobuf(protocol-buffers,协议缓冲区),proto3等知识.网上很多文章/帖子经常把gRPC与proto3放在一起,为避免初学者 ...