vijos 1213:80人环游世界
描述
想必大家都看过成龙大哥的《80天环游世界》,里面的紧张刺激的打斗场面一定给你留下了深刻的印象。现在就有这么一个80人的团伙,也想来一次环游世界。
他们打算兵分多路,游遍每一个国家。
因为他们主要分布在东方,所以他们只朝西方进军。设从东方到西方的每一个国家的编号依次为1...N。假若第i个人的游历路线为P1、P2......Pk(0≤k≤N),则P1<P2<......<Pk。
众所周知,中国相当美丽,这样在环游世界时就有很多人经过中国。我们用一个正整数Vi来描述一个国家的吸引程度,Vi值越大表示该国家越有吸引力,同时也表示有且仅有Vi个人会经过那一个国家。
为了节省时间,他们打算通过坐飞机来完成环游世界的任务。同时为了省钱,他们希望总的机票费最小。
明天就要出发了,可是有些人临阵脱逃,最终只剩下了M个人去环游世界。他们想知道最少的总费用,你能告诉他们吗?
格式
输入格式
第一行两个正整数N,M。
第二行有N个不大于M正整数,分别表示V1,V2......VN。
接下来有N-1行。第i行有N-i个整数,该行的第j个数表示从第i个国家到第i+j个国家的机票费(如果该值等于-1则表示这两个国家间没有通航)。
输出格式
在第一行输出最少的总费用。
样例
样例输入
6 3
2 1 3 1 2 1
2 6 8 5 0
8 2 4 1
6 1 0
4 -1
4
样例输出
27
按某云神的方法建图就可以了Orz……没有用zkw,直接spfa,居然比云神稍快……
首先把每个点拆成两个,分别表示来源跟去向,用wi,ui表示,那么由于每个点会有vi个人经过,那么连边(S,wi,vi,0),(ui,T,vi,0)((u,v,f,c)表示从u连边到v,流量f,费用c),那么对于每条费用为pi的航线(s,t)就有连边(ws,ut,inf,pi),又由于有些人可以直接在某个城市出发,那么另加一个点k,连边(S,k,m,0),对于每个城市i,连边(k,ui,inf,0),然后跑一次最小费用最大流,那么mincost就是答案了。。。(这算是经典模型了吧。。。)——云神
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 210
#define MAXM 12000
using namespace std; struct na{
int y,z,f,ne;
};
int n,m,l[MAXN],r[MAXN],num=,p,ch,ans=,S,T,k,dis[MAXN],an=,mi[MAXN],ro[MAXN],qi[MAXN];
na b[MAXM];
bool bo[MAXN];
const int INF=1e9;
queue <int> q;
inline int min(int x,int y){return x>y?y:x;}
inline int read(){
p=;ch=getchar();int f=;
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') p=p*+ch-, ch=getchar();
return p*f;
}
inline void spfa(){
register int i;
q.push(S);
bo[S]=;
for (i=;i<MAXN;i++) dis[i]=INF;
mi[S]=INF;dis[S]=;
while(!q.empty()){
int k=q.front();q.pop();bo[k]=;
if (k==T) continue;
for (i=l[k];i;i=b[i].ne){
if (b[i].z>&&dis[b[i].y]>b[i].f+dis[k]){
dis[b[i].y]=b[i].f+dis[k];
mi[b[i].y]=min(mi[k],b[i].z);
ro[b[i].y]=i;
qi[b[i].y]=k;
if (!bo[b[i].y]){
bo[b[i].y]=;
q.push(b[i].y);
}
}
}
}
}
inline int add(int x,int y,int z,int f){
num++;
if (l[x]==) l[x]=num;else b[r[x]].ne=num;
b[num].y=y;b[num].z=z;b[num].f=f;r[x]=num;
}
inline void in(int x,int y,int z,int f){
add(x,y,z,f),add(y,x,,-f);
}
int main(){
register int i,j;
n=read();m=read();
S=*n+;T=*n+;
for (i=;i<=n;i++){
k=read();
in(S,i,k,);
in(i+n,T,k,);
in(T+,i+n,INF,);
}
in(S,T+,m,);
for (i=;i<n;i++)
for (j=i+;j<=n;j++){
k=read();
if (k!=-) in(i,n+j,INF,k);
}
for(;;){
spfa();
if (dis[T]==INF) break;
an+=mi[T]*dis[T];
for (i=T;i;i=qi[i]) b[ro[i]].z-=mi[T],b[((ro[i]-)^)+].z+=mi[T];
}
printf("%d\n",an);
}
vijos 1213:80人环游世界的更多相关文章
- vijos P1213 80人环游世界(有源汇的上下界费用流)
[题目链接] https://vijos.org/p/1213 [题意] m个人将n个点访问完,每个点能且只能访问v次,点点之间存在有权边,问最小费用. [思路] 有源汇的上下界最小费用最大流. 每个 ...
- 【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用最大流)
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 321 Solved: 201[Submit][Status][Discus ...
- BZOJ2055: 80人环游世界
题解: 总算A掉了,各种蛋疼... int main() { freopen("input.txt","r",stdin); freopen("out ...
- BZOJ 2055: 80人环游世界 [上下界费用流]
2055: 80人环游世界 题意:n个点带权图,选出m条路径,每个点经过val[i]次,求最小花费 建图比较简单 s拆点限制流量m 一个点拆成两个,限制流量val[i],需要用上下界 图中有边的连边, ...
- P4553 80人环游世界
题目地址:P4553 80人环游世界 上下界网络流 无源汇上下界可行流 给定 \(n\) 个点, \(m\) 条边的网络,求一个可行解,使得边 \((u,v)\) 的流量介于 \([B(u,v),C( ...
- [BZOJ2055]80人环游世界 有上下界最小费用最大流
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面 ...
- bzoj 2055: 80人环游世界 -- 上下界网络流
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面 ...
- 【BZOJ】2055 80人环游世界
[算法]有源汇上下界最小费用可行流 [题解]上下界 因为上下界相同,所以无所谓最小流了,可行流(初始流+附加流)就是答案了. 记得源点向新建节点连一条容量为m(人)的边. bzoj 2055 80人环 ...
- 【BZOJ2055】80人环游世界 有上下界费用流
[BZOJ2055]80人环游世界 Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个 ...
随机推荐
- 解决vue.js修改数据无法触发视图
data:{checkValue:{}}that.checkValue[key] = [] 赋值无法实时改变变量:(数据其实最终被修改,但是并没有触发检测从而更新视图)原因:Vue 不能检测到对象属性 ...
- Udacity并行计算课程笔记-The GPU Hardware and Parallel Communication Patterns
本小节笔记大纲: 1.Communication patterns gather,scatter,stencil,transpose 2.GPU hardware & Programming ...
- geoserver安装部署步骤
方式一:直接在geoserver官网下载zip源代码解压包,直接部署在tomcat里面运行geoserver: 方式二:下载安装包方式 以GeoServer2.8.5版本为准,安装之前必须要保证你机子 ...
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...
- ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)
这节对Popups这一章的最后两个例子进行介绍和解析. 第一个[Popup Actions]介绍了弹窗中如何自定义工具按钮(名为actions),以PopupTemplate+FeatureLayer ...
- html统计
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- 编译TensorFlow源码
编译TensorFlow源码 参考: https://www.tensorflow.org/install/install_sources https://github.com/tensorflo ...
- Java求循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节.比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位.下面的方法,可以求出循环节的长 ...
- SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法
使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java ...
- TPYBoard实例之利用WHID为隔离主机建立隐秘通道
本文作者:xiaowuyi,来自FreeBuf.COM(MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇) 0引言 从2014年BADUSB出现以后,USB- ...