BZOJ 2055 80人环游世界 有上下界最小费用可行流
题意:
现在有这么一个m人的团伙,也想来一次环游世界。 他们打算兵分多路,游遍每一个国家。
因为他们主要分布在东方,所以他们只朝西方进军。设从东方到西方的每一个国家的编号依次为1...N。假若第i个人的游历路线为P1、P2......Pk(0≤k≤N),则P1<P2<......<Pk。
众所周知,中国相当美丽,这样在环游世界时就有很多人经过中国。我们用一个正整数Vi来描述一个国家的吸引程度,Vi值越大表示该国家越有吸引力,同时也表示有且仅有Vi个人会经过那一个国家。
为了节省时间,他们打算通过坐飞机来完成环游世界的任务。同时为了省钱,他们希望总的机票费最小。
1<= N < =100 ,1<= M <= 79
分析:
又一次用到了我们强大的拆点大法。
我们把每个国家i拆点,拆成入点和出点,入点向出点连上下界均为Vi,表示这个国家有且仅有Vi个人经过。
建立一个中转节点s,从源点S向s点连上界为m下界为0的边,代表总人数,然后从s点向每个国家的入点连容量无限的边,然后每个国家的出点向T点连容量无限的边。
以上所有边费用都为0.
接下来,如果i到j有航线,那么就从i的出点到j的入点连流量无限费用为机票价格的边。
最后按照可行流建边,跑最小费用最大流即可。
代码:
#include<bits/stdc++.h>
using namespace std;int S,T,tot=;
const int N=,M=,inf=0x3f3f3f3f;
struct node{int y,f,c,nxt;}e[M];int c=,v[N];
int h[N],q[M],d[N],n,m,s,t,pre[N];bool vis[N];
void add(int x,int y,int z,int w){
e[++c]=(node){y,z,w,h[x]};h[x]=c;
e[++c]=(node){x,,-w,h[y]};h[y]=c;
} bool spfa(){
for(int i=;i<=T;i++) d[i]=inf;
int l=,r=;q[++r]=S;vis[S]=;d[S]=;
while(l<=r){
int x=q[l++];vis[x]=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]>d[x]+e[i].c&&e[i].f){
d[y]=d[x]+e[i].c;pre[y]=i;
if(!vis[y]) q[++r]=y,vis[y]=;
}
} return (d[T]!=inf);
} void aug(){ int x=inf;
for(int i=pre[T];i;i=pre[e[i^].y])
x=min(x,e[i].f);
for(int i=pre[T];i;i=pre[e[i^].y])
tot+=x*e[i].c,e[i].f-=x,e[i^].f+=x;
} int main(){
scanf("%d%d",&n,&m);s=;
S=,T=;add(S,s,m,);
for(int i=,x;i<=n;i++)
scanf("%d",&x),add(s,i,inf,),
v[i]-=x,v[i+n]+=x;
for(int i=;i<=n;i++)
for(int j=i+,x;j<=n;j++){
scanf("%d",&x);
if(~x) add(i+n,j,inf,x);
} for(int i=;i<=n*;i++)
v[i]>?add(S,i,v[i],):
(v[i]?add(i,T,-v[i],):(void));
while(spfa()) aug();
printf("%d\n",tot);return ;
}
有上下界最小费用可行流
BZOJ 2055 80人环游世界 有上下界最小费用可行流的更多相关文章
- [BZOJ2055]80人环游世界 有上下界最小费用最大流
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面 ...
- BZOJ 2055: 80人环游世界(有上下界的费用流)
题面 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 693 Solved: 434 [Submit][Status][Discuss] Descript ...
- BZOJ 3876 支线剧情 有源汇有上下界最小费用可行流
题意: 给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和 分析: 这道题乍一看,可能会想到什么最小链覆盖之类的,但是仔细一想,会发现不行,一是因 ...
- bzoj 2055 80人环游世界
有源汇上下界最小费用可行流. 将每个国家拆点. 源点向一个新建节点连一条上界为总人数下界为0费用为0的边. 新建节点向每个国家的入点连一条上界为正无穷下界为0费用为0的边. 每个国家的入点向出点连一条 ...
- BZOJ 2055: 80人环游世界 [上下界费用流]
2055: 80人环游世界 题意:n个点带权图,选出m条路径,每个点经过val[i]次,求最小花费 建图比较简单 s拆点限制流量m 一个点拆成两个,限制流量val[i],需要用上下界 图中有边的连边, ...
- bzoj 2055: 80人环游世界 -- 上下界网络流
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面 ...
- 【BZOJ2055】80人环游世界 有上下界费用流
[BZOJ2055]80人环游世界 Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个 ...
- P4553 80人环游世界(上下界费用流)
P4553 80人环游世界 emm......先从上下界网络流(转)开始 再到现在的上下界费用流 因为有上下界,我们需要记下每个点的流量差$ex[i]$,用于调整 $ins(x,y,l,r,v)=li ...
- bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】
连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...
随机推荐
- bzoj 3528 [Zjoi2014]星系调查【树链剖分+数学】
参考:https://www.cnblogs.com/zhuohan123/p/3698852.html 首先,根据点到直线距离公式 \[ d=\frac{kx_0-y_0+b}{\sqrt{k^{2 ...
- Elementui实战知识点随记
1. Elementui实战知识点随记 1.1. 表单验证 对于复杂数据,类似于对象里面包含数组,每个数组又包含多个对象,表单验证我查看了网上很多资料都说Elementui不支持,实际上,经过我官网的 ...
- HttpSession讲解
1:session进行身份验证的原理: 当客户端第一次访问服务器的时候,此时客户端的请求中不携带任何标识给服务器,所以此时服务器无法找到与之对应的 session,所以会新建session对象,当服务 ...
- failed to push some refs to 'https://gitee.com/ftl_663/java-shop.git'
1.git init 2.git add . 3.git commit -m "init" 4.git remote add origin https://gitee.com/ ...
- 【先定一个小目标】Ubuntu 16.04 搭建 zookeeper
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
- C#中如何判断键盘按键和组合键
好记性不如烂笔头子,现在记录下来,不一定会有很详尽的实例,只写最核心的部分. C# winform的窗体类有KeyPreview属性,可以接收窗体内控件的键盘事件注册.窗体和控件都有KeyDown,K ...
- yum 安装报错:*epel: mirrors.aliyun.comError: xzcompressionnot available
环境背景:epel源下载地址: http://mirrors.aliyun.com/Centos内核内核版本[root@nfs01 ~]# uname -r2.6.32-642.el6.x86_64= ...
- 轻松搞定Spring+quartz的定时任务
1.spring 的定时任务写法有两种:一种是继承工作类,一种是普通的Bean,定时写法有两种写法:一种是以时间间隔启动任务SimpleTriggerBean,一种是以时刻启动任务CronTrigge ...
- R in action读书笔记(13)第十章 功效分析
功效分析 功效分析可以帮助在给定置信度的情况下,判断检测到给定效应值时所需的样本量.反过来,它也可以帮助你在给定置信度水平情况下,计算在某样本量内能检测到给定效应值的概率.如果概率低得难以接受,修改或 ...
- nginx访问php程序相关配置
server { listen *:80; charset utf-8; server_name roujiaxiaomowang.wanghaokun.com mowang.crucco.com; ...