【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> ...
随机推荐
- 归并排序Merge Sort
//C语言实现 void mergeSort(int array[],int first, int last) { if (first < last)//拆分数列中元素只剩下两个的时候,不再拆分 ...
- neo-thinsdk-cs 之 thinWallet 接入私链
neo-thinsdk-cs 之 thinWallet 接入私链 2017年底刚开始接触区块链,目前在被 NEO 折磨. 一开始被官方文档和 NEO-GUI 搞得体无完肤(尤其是传说中的 F12),也 ...
- hdu4143 A Simple Problem
A Simple Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
配置选项 在基于"less rope to hang yourself with"思想下,.NET 框架没有给开发提供很多太多的配置选项.但在大多数情况下,GC会跟你的硬件配置,及 ...
- JS中的Undefined和Null的区别
Undefined ①在声明变量时,如果没有给变量赋值,则这个变量就是undefined类型: ②访问未声明的变量会报错误消息,但这样的变量使用 typeof 测试,返回的值为Undefined. 即 ...
- EL表达式判断不能为空
前几天在做一个网站的时候遇到一个问题,要判断一个在request或者session域里面的对象是否为空,利用EL表达式,正常思维就是用 <c:if test="${* != null} ...
- NOIP2017 - 宝藏
LibreOJ链接 Description 给出一个\(n(n\leq12)\)个点\(m(m\leq1000)\)条边的带权无向图,求该图的一棵生成树,使得其边权×该边距根的深度之和最小. Solu ...
- 从零开始学习前端JAVASCRIPT — 14、闭包与继承
一.闭包 1 . 概念:闭包就是能够读取其他函数内部变量的函数.在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”. 2 . 闭包的特点 1)可以读取 ...
- windows下常用工具
下面是平时自用的一些软件,感觉挺好用的,推荐给大家咯. everything 搜索神器 faststone capture 红绿小工具,工具小功能强 clcl 复制粘贴神器 f.lux linux和w ...
- 影响JavaScript应用可扩展性因素
引言:JavaScript 应用变得越来越庞大.这是因为使用JavaScript能做的事情远比我们大多数人所需求的要多得多.我们不能仅因为技术上可行,就去考虑软件系统的扩展问题.为一个不需要扩展的系统 ...