80人环游世界(bzoj 2055)
Description
Input
Output
在第一行输出最少的总费用。
Sample Input
2 1 3 1 2 1
2 6 8 5 0
8 2 4 1
6 1 0
4 -1
4
Sample Output
HINT
1<= N < =100 1<= M <= 79
- /*
- 有上下界的费用流。
- 对于每个点,拆点:
- 超级源点向x连一条容量为v[x],费用为0的边;
- x'向超级汇点连一条容量为v[x],费用为0的边;
- 源点向x连一条容量为inf,费用为0的边;
- x'向汇点连一条容量为inf,费用为0的边。
- 对于原图一条u->v,费用为w的边:
- u'向v连一条容量为inf,费用为w的边。
- */
- #include<cstdio>
- #include<iostream>
- #include<queue>
- #define N 310
- #define M 110000
- #define inf 1000000000
- using namespace std;
- int head[N],dis[N],inq[N],fa[N],n,m,cnt=,SS,TT,S,T,ans;
- struct node{int v,f,w,pre;}e[M];
- queue<int> q;
- void add(int u,int v,int f,int w){
- e[++cnt].v=v;e[cnt].f=f;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
- e[++cnt].v=u;e[cnt].f=;e[cnt].w=-w;e[cnt].pre=head[v];head[v]=cnt;
- }
- bool spfa(){
- for(int i=;i<=T;i++) dis[i]=inf;
- q.push(S);dis[S]=;
- while(!q.empty()){
- int u=q.front();q.pop();inq[u]=;
- for(int i=head[u];i;i=e[i].pre)
- if(e[i].f&&dis[e[i].v]>dis[u]+e[i].w){
- dis[e[i].v]=dis[u]+e[i].w;
- fa[e[i].v]=i;
- if(!inq[e[i].v]){
- q.push(e[i].v);
- inq[e[i].v]=;
- }
- }
- }
- return dis[T]!=inf;
- }
- void updata(){
- int i=fa[T],x=inf;
- while(i){
- x=min(x,e[i].f);
- i=fa[e[i^].v];
- }
- i=fa[T];
- while(i){
- e[i].f-=x;
- e[i^].f+=x;
- i=fa[e[i^].v];
- }
- ans+=x*dis[T];
- }
- int main(){
- scanf("%d%d",&n,&m);
- SS=n*+;TT=n*+;S=n*+;T=n*+;
- add(TT,SS,m,);
- for(int i=;i<=n;i++){
- int x;scanf("%d",&x);
- add(S,i+n,x,);
- add(i,T,x,);
- add(SS,i,inf,);
- add(i+n,TT,inf,);
- }
- for(int i=;i<=n;i++)
- for(int j=i+;j<=n;j++){
- int x;scanf("%d",&x);
- if(x==-) continue;
- add(i+n,j,inf,x);
- }
- while(spfa())
- updata();
- printf("%d",ans);
- return ;
- }
80人环游世界(bzoj 2055)的更多相关文章
- 【BZOJ】2055 80人环游世界
[算法]有源汇上下界最小费用可行流 [题解]上下界 因为上下界相同,所以无所谓最小流了,可行流(初始流+附加流)就是答案了. 记得源点向新建节点连一条容量为m(人)的边. bzoj 2055 80人环 ...
- 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天环游世界>,里面 ...
- 【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 ...
- [BZOJ2055]80人环游世界 有上下界最小费用最大流
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面 ...
- P4553 80人环游世界
题目地址:P4553 80人环游世界 上下界网络流 无源汇上下界可行流 给定 \(n\) 个点, \(m\) 条边的网络,求一个可行解,使得边 \((u,v)\) 的流量介于 \([B(u,v),C( ...
- 【BZOJ2055】80人环游世界 有上下界费用流
[BZOJ2055]80人环游世界 Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个 ...
- P4553 80人环游世界(上下界费用流)
P4553 80人环游世界 emm......先从上下界网络流(转)开始 再到现在的上下界费用流 因为有上下界,我们需要记下每个点的流量差$ex[i]$,用于调整 $ins(x,y,l,r,v)=li ...
随机推荐
- Python基础2-Python中文乱码(转)
转自:https://blog.csdn.net/apache0554/article/details/53889253 前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新 ...
- python 基础 for else
for one in many_list: if "k" in one: print "在里面" break else: print "没有在里面&q ...
- Linux产生随机数的几种方法
.echo $RANDOM .openssl rand -base64 .date +%n%N .head /dev/urandom |cksum .cat /proc/sys/kernel/rand ...
- 【CodeBase】通过层级键在多维数组中获取目标值
通过层级键在多维数组中获取目标值 /* *Author : @YunGaZeon *Date : 2017.08.09 *param data : Data Array *param keys : K ...
- php扩展开发-快速上手
系统环境CentOS release 6.5 (Final) PHP版本php-5.6.27 扩展开发需要有php环境及php的源代码,我的PHP安装目录/home/zhangxiaomin/stud ...
- ThinkPHP邮件发送S(Smtp + Mail + phpmailer)
三种邮件发送介绍:(Smtp,Mail以及phpmailer)ThinkPhp 框架下开发. 邮件发送配置先前准备(用该账号做测试用):(这里用新浪邮箱服务器)将自己的新浪邮箱开通 POP3/SMTP ...
- python3.7 time模块
#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 time模块 #time模块没有time.py文件,是内置到解释 ...
- shell脚本中的交互式输入自动化
shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了. 1 利用重定向 重定向的方法应该是最简单的 例: 以下的te ...
- excel VBA 将文本数值转换为数字格式(单元格中数据左上角是绿三角,鼠标点上有叹号标示)
Range("A6").SelectSelection.CopyRange("A10:A60").SelectRange(Selection, Selectio ...
- Django templates(模板)
为什么用templates? views.py视图函数是用来写Python代码的,HTML可以被直接硬编码在views.py之中.如下: import datetime def current_tim ...