【BZOJ 2324】[ZJOI2011]营救皮卡丘 费用流
本人实行诱骗拐卖(利用自然分层与实际意义),正解拼接补充(充分利用最大流限制(不浪费任何一个走出去的机会而不是不浪费任何一个已有的流)与问题转换)
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N=;
const int M=;
const int K=;
const int Inf=0x3f3f3f3f;
const int treat=;
const int P=N*;
const int E=N*N*;
int n,m,k;
int via[N][N];
struct V{
int to,next,f,c;
}c[E];
int head[P],t=;
inline void add(int x,int y,int z,int _){
c[++t].to=y,c[t].next=head[x],c[t].f=z,c[t].c=_,head[x]=t;
}
int dis[P],anc[P];
int q[P],front,back;
bool in[P];
int S,T;
inline bool spfa(){
memset(dis,0x3f,sizeof(dis));
in[S]=true,q[back++]=S,dis[S]=;
if(back==P)back=;
while(front!=back){
int x=q[front++];in[x]=false;
if(front==P)front=;
for(int i=head[x];i;i=c[i].next)
if(c[i].f&&dis[x]+c[i].c<dis[c[i].to]){
dis[c[i].to]=dis[x]+c[i].c,anc[c[i].to]=i;
if(!in[c[i].to]){
q[back++]=c[i].to,in[c[i].to]=true;
if(back==P)back=;
}
}
}
return dis[T]!=Inf;
}
inline int shoot(){
int f=Inf;
for(int i=anc[T];i;i=anc[c[i^].to])f=std::min(f,c[i].f);
for(int i=anc[T];i;i=anc[c[i^].to])c[i].f-=f,c[i^].f+=f;
return f*dis[T];
}
int main(){
memset(via,0x3f,sizeof(via));
scanf("%d%d%d",&n,&m,&k);
++n;
for(int i=,x,y,z;i<=m;++i){
scanf("%d%d%d",&x,&y,&z);
++x,++y;
via[x][y]=via[y][x]=std::min(via[x][y],z);
}
S=n+n+,T=n+n+;
for(int i=;i<=n;++i){
via[i][i]=;
add(i,i+n,,-treat),add(i+n,i,,treat);
add(i,i+n,k,),add(i+n,i,,);
add(i+n,T,k,),add(T,i+n,,);
}
for(int a=;a<=n;++a)
for(int b=;b<=n;++b)
via[a][b]=std::min(via[a][b],via[a][]+via[][b]);
for(int i=;i<=n;++i){
for(int a=;a<=n;++a)
for(int b=;b<=n;++b)
via[a][b]=std::min(via[a][b],via[a][i]+via[i][b]);
for(int j=;j<i;++j){
add(j+n,i,k,via[j][i]);
add(i,j+n,,-via[i][j]);
}
}
add(S,,k,);
add(,S,,);
int ans=;
while(spfa())ans+=shoot();
ans+=n*treat;
printf("%d",ans);
return ;
}
【BZOJ 2324】[ZJOI2011]营救皮卡丘 费用流的更多相关文章
- BZOJ.2324.[ZJOI2011]营救皮卡丘(费用流 Floyd)
BZOJ 洛谷 首先预处理出\(dis[i][j]\),表示从\(i\)到\(j\)的最短路.可以用\(Floyd\)处理. 注意\(i,j\)是没有大小关系限制的(\(i>j\)的\(dis[ ...
- bzoj 2324 ZJOI 营救皮卡丘 费用流
题的大概意思就是给定一个无向图,边有权值,现在你有k个人在0点,要求走到n点,且满足 1:人们可以分头行动,可以停在某一点不走了 2:当你走到x时,前x-1个点必须全部走过(不同的人走过也行,即分两路 ...
- bzoj 2324 [ZJOI2011]营救皮卡丘(floyd,费用流)
2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1777 Solved: 712[Submit][Stat ...
- BZOJ 2324: [ZJOI2011]营救皮卡丘( floyd + 费用流 )
昨晚写的题...补发一下题解... 把1~N每个点拆成xi, yi 2个. 预处理i->j经过编号不超过max(i,j)的最短路(floyd) S->0(K, 0), S->xi(1 ...
- bzoj2324 [ZJOI2011]营救皮卡丘 费用流
[ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2653 Solved: 1101[Submit][Status][D ...
- BZOJ 2324: [ZJOI2011]营救皮卡丘(带上下限的最小费用最大流)
这道题么= =还是有些恶心的,第一次写带上下界的网络流,整个人都萌萌哒~~~ 首先先预处理得最短路后 直接用费用流做就行了。 第一次写,还是挺好写的= = CODE: #include<cstd ...
- bzoj 2324: [ZJOI2011]营救皮卡丘
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
- BZOJ2324: [ZJOI2011]营救皮卡丘
2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1359 Solved: 522[Submit][Stat ...
- 【BZOJ2324】[ZJOI2011]营救皮卡丘(网络流,费用流)
[BZOJ2324][ZJOI2011]营救皮卡丘(网络流,费用流) 题面 BZOJ 洛谷 题解 如果考虑每个人走的路径,就会很麻烦. 转过来考虑每个人破坏的点集,这样子每个人可以得到一个上升的序列. ...
随机推荐
- scala成长之路(3)隐式转换
不废话,先上例子:定义一个参数类型为String的函数: scala> def sayHello(name:String) = println("hello " + name ...
- hack游戏攻略(黑吧安全吧的黑客闯关游戏)古墓探秘
2019.2.11 这个是找到的一个黑客游戏,就是一关一关,挺像ctf的,玩玩也挺有意思,还能涨知识. 地址:http://hkyx.myhack58.com/ 入口: 入口就是这样的.提示是 图内有 ...
- 密码发生器 南阳acm519
密码发生器 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如 ...
- 糖果 南阳acm589
糖果 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 topcoder工作室的PIAOYIi超级爱吃糖果,现在他拥有一大堆不同种类的糖果,他准备一口气把它们吃完,可是 ...
- Tensorflow之MNIST的最佳实践思路总结
Tensorflow之MNIST的最佳实践思路总结 在上两篇文章中已经总结出了深层神经网络常用方法和Tensorflow的最佳实践所需要的知识点,如果对这些基础不熟悉,可以返回去看一下.在< ...
- 使用localStorage,sessionStorage,cookie等存储
Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. 特点: localStor ...
- Git的使用规范(二)
今天,我们来介绍一下git的一些命令行,来帮我们后面可以面对一些情况的时候,我们可以有一些解决的方法 1.git查看历史记录最全的命令行 git log --pretty=raw 2.对于一下的几个情 ...
- [转]Visual Studio 项目类型 GUID 清单
转自:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs Complete li ...
- redis入门:介绍、特点、安装、各类型常用操作
一.redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. Redis支持多种类型的数据结构,如 字符串(strings), 散列(ha ...
- vue整合mui
步骤1:下载https://github.com/dcloudio/mui 步骤2:将下载来的包中的dist文件夹 放到vue项目的assets中 步骤3:修改webpack配置 找到build下 ...