【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> ...
随机推荐
- 训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
1. 下载训练.验证.测试数据和 VOCdevkit,下载地址: http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2 ...
- zabbix 网络模板自动发现端口时,过滤掉某些特定规则的端口,减少item的方法
1.需求描述 默认情况下Zabbix 模板 中网络接口自动发现接口时,会产生很多item,有时候会有我们不需要的一些接口,这时候需要过滤掉他们. 比如我有一台运行kvm的服 ...
- 给Linux系统/网络管理员的nmap的29个实用例子
Nmap亦称为Network Mapper(网络映射)是一个开源并且通用的用于Linux系统/网络管理员的工具.nmap用于探查网络.执行安全扫描.网络核查并且在远程机器上找出开放端口.它可以扫描在线 ...
- Nginx调用远程php-fpm
在Nginx服务器的情况下,当我们输入 http://localhost:8080/index.php回车的时候 浏览器会将请求发送给Nginx,Nginx会根据我们所配置的以.php结尾的PHP的文 ...
- [CJOJ2410]数列操作d
[CJOJ2410]数列操作d 标签: 线段树 题解 没时间写题了,我来嘴巴AC吧. 注意区间加的这个值不是 确定的,随着元素位置的变化而改变. 只需要能维护这个东西剩下的就很好做了. 那么\(x*( ...
- Dockerfile 中的 CMD 与 ENTRYPOINT
CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令.单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在 ...
- Mock摆脱后端拖拉(借鉴官网)(一)
mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试.mock有如下功能 根据数据模板生成模板数据 模拟ajax请求,生成请求数据 基于html模板生成模拟数据 下载安装 n ...
- java中的Collection集合类
随着1998年JDK 1.2的发布,同时新增了常用的Collections集合类,包含了Collection和Map接口.而Dictionary类是在1996年JDK 1.0发布时就已经有了.它们都可 ...
- nxlog4go Log Levels and Pattern Layout
Log levels nxlog4go provides log levels as below: type Level int const ( FINEST Level = iota FINE DE ...
- MySQL取得某一范围随机数
①直接取值 若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)). 例如, 若要在7 到 12 的范围(包括7和12) ...