【BZOJ3931】【CQOI2015】网络吞吐量(最短路,网络流)
【BZOJ3931】【CQOI2015】网络吞吐量(最短路,网络流)
题面
题解
网络流模板题???
SPFA跑出最短路,重新建边后
直接Dinic就行了
大火题嗷。。。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
using namespace std;
#define INF 1e18
#define MAX 1000
#define MAXL 100000
#define ll long long
#define int ll
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
struct Line
{
int v,next,w;
}e[MAXL],E[MAXL];
int h[MAX],cnt=1;
int H[MAX],Cnt=1;
int n,m,level[MAX];
ll dis[MAX],C[MAX];
ll FB[MAXL];
ll G[MAX][MAX];
bool vis[MAX];
inline void Add(int u,int v,int w)
{
e[cnt]=(Line){v,h[u],w};
h[u]=cnt++;
}
inline void reAdd(int u,int v,int w)
{
E[Cnt]=(Line){v,H[u],w};FB[Cnt]=Cnt+1;
H[u]=Cnt++;
E[Cnt]=(Line){u,H[v],0};FB[Cnt]=Cnt-1;
H[v]=Cnt++;
}
void spfa()
{
queue<int> Q;
for(int i=1;i<=n;++i)dis[i]=INF,vis[i]=false;
vis[1]=true;dis[1]=0;
Q.push(1);
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].v;
ll w=e[i].w+dis[u];
if(dis[v]>w)
{
dis[v]=w;
if(!vis[v]){vis[v]=true;Q.push(v);}
}
}
vis[u]=false;
}
}
void Rebuild()
{
C[n]=INF;C[1]=INF;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(dis[i]+G[i][j]==dis[j]&&i!=j)
reAdd(i,j,min(C[j],C[i]));
}
bool BFS()
{
queue<int> Q;while(!Q.empty())Q.pop();
for(int i=1;i<=n;++i)level[i]=0;
level[1]=1;Q.push(1);
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=H[u];i;i=E[i].next)
{
int v=E[i].v;
if(E[i].w&&!level[v])
{
level[v]=level[u]+1;
Q.push(v);
}
}
}
return level[n];
}
ll DFS(int u,ll ff)
{
if(!ff||u==n)return ff;
ll re=0;
for(int i=H[u];i;i=E[i].next)
{
int v=E[i].v;
if(E[i].w&&level[u]+1==level[v])
{
ll gg=DFS(v,min(ff,E[i].w));
re+=gg;ff-=gg;E[i].w-=gg;
E[FB[i]].w+=gg;
}
}
return re;
}
ll Dinic()
{
ll re=0;
while(BFS())re+=DFS(1,INF);
return re;
}
#undef int
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)G[i][j]=INF;
for(ll i=1;i<=m;++i)
{
ll u=read(),v=read(),w=read();
Add(u,v,w);Add(v,u,w);
G[u][v]=G[v][u]=min(G[u][v],w);
}
for(ll i=1;i<=n;++i)C[i]=read();
spfa();
Rebuild();
printf("%lld\n",Dinic());
return 0;
}
【BZOJ3931】【CQOI2015】网络吞吐量(最短路,网络流)的更多相关文章
- [bzoj3931][CQOI2015]网络吞吐量——最短路+网络流
题目 传送门 题解 第一次一遍就AC一道bzoj上的题,虽然是一道水题... 我们做一边最短路,求出每个点的dist,然后再做一次类似spfa的操作,求出每个点是否可以用于建图. 在新图上拆点跑一边d ...
- bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
- bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)
3931: [CQOI2015]网络吞吐量 题目:传送门 题解: 现在有点难受....跳了一个多钟...菜啊... 题意都把做法一起给了....最短路+网路流啊. 不想说话...记得开long lon ...
- 【BZOJ-3931】网络吞吐量 最短路 + 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1228 Solved: 524[Submit][Stat ...
- bzoj3931: [CQOI2015]网络吞吐量
将最短路图找出来,跑maxflow即可.有注意到数据范围.然后输出的时候%dWA了三次QAQ... #include<cstdio> #include<cstring> #in ...
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...
- bzoj千题计划136:bzoj3931: [CQOI2015]网络吞吐量
http://www.lydsy.com/JudgeOnline/problem.php?id=3931 在最短路网络上跑最大流 #include<queue> #include<c ...
- 【bzoj3931】[CQOI2015]网络吞吐量 最短路+最大流
题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路由器需要选择最优的路径转发 ...
- 【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量
跑出最短路图,然后把结点拆点跑最大流. #include<cstdio> #include<queue> #include<cstring> #include< ...
- BZOJ3931 [CQOI2015]网络吞吐量(最大流)
没啥好说的,有写过类似的,就是预处理出最短路上的边建容量网络. #include<cstdio> #include<cstring> #include<queue> ...
随机推荐
- 【JavaWeb】c3p0连接池与MySQL
正文之前 在之前的文章讲到了传统的JDBC连接MySQL的方式,但是这样的方式在进行多个连接时,就显得效率低下,明显不如连接池的效率,所以我们这次来讲解一下JDBC连接池之一:c3p0 正文 1. 准 ...
- mac下自带的Apache+PHP环境输出错误提示
sudo vim /etc/php.ini 找到 display_errors = Off ,把Off 改为 On . 最后为 display_errors = On ; 找到 error_repor ...
- win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)
在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...
- kvm命令总结和虚机器备份迁移
管理kvm虚拟机命令 virsh uri: 查看当前主机上hypervisor的连接路径: virsh connect ...
- Mysql(六):数据备份、pymysql模块
一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...
- POJ - 2253 Frogger 单源最短路
题意:给定n个点的坐标,问从第一个点到第二个点的最小跳跃范围.d(i)表示从第一个点到达第i个点的最小跳跃范围. AC代码 #include <cstdio> #include <c ...
- CodeForces-747C
直接模拟就行,用一个数组保存某个server上次是在哪个task里面即可很方便判断它现在是否可用. AC代码: #include<cstdio> #include<cstring&g ...
- Qt Creator 整合 python 解释器教程
目录 1. 前言 2.前提条件 3.步骤 3.1 新建 python文件 3.2 编写 python 代码 3.3 配置 python 解释器 3.4 执行 python file 1. 前言 Pyt ...
- python内置函数-compile()
python的内置函数 compile()--编译. 这个函数有什么用呢? 一个最简单的例子, 就是我们的代码, 会被解释器读取,解释器读取后的其实是字符串, 然后通过compile编译后, 又转换成 ...
- (转载)windows下mysql忘记密码
Mysql版本:5.1 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd窗口,切换到mysql的bin目录 ...