【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> ...
随机推荐
- vagrant系列教程(二):vagrant的配置文件vagrantfile详解(转)
原文:http://blog.csdn.net/hel12he/article/details/51089774 上一篇文章完整的讲叙了如何安装一个vagrant的环境.这里主要说一说vagrant的 ...
- PHP将HTML的内容保存成word文档
<?php class word { function start() { ob_start(); echo '<html xmlns:o="urn:schemas-micros ...
- xBIM WeXplorer xViewer的导航,相机、剖切、隐藏 等操作
目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...
- 基于Parallax设计HTML视差效果
年关将至,给大家拜年. 最近时间充裕了一点,给大家介绍一个比较有意思的控件:Parallax.它可以用来实现鼠标移动时,页面上的元素也做偏移的视差效果.在一些有表现层次,布局空旷的页面上,用来做Hea ...
- python进阶学习笔记(一)
python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...
- java程序员理解js中的闭包
1.闭包概念: 就是函数内部通过某种方式访问一个函数内部的局部变量 再次理解: 闭包产生原因: 1.内部函数引用了外部函数的变量 作用:延长局部变量的生命周期 让函数外部可以调用到函数内部的数据 利用 ...
- 15-谜问题(深拷贝、LC检索、面向对象编程)
问题描述: 在一个分成16格的方形棋盘上,放有15块编了号码的牌.对这些牌给定一种初始排列,要求通过一系列的合法移动将这一初始排列转换成目标排列. 这个问题解决时用到了L-C检索.在检索的过程中计算估 ...
- HDU - 1789 贪心
贪心策略:按照分数降序排列,如果分数相同将截止时间早的排在前面.每次让作业尽量晚完成,因此需要逆序枚举判断这一天是否已经做了其他作业,如果没时间做这个作业说明不能完成,否则将这一天标记. AC代码 # ...
- Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分
一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redis的东西要看的都差不多看完了.网上的东西也不多了.剩下来就看看官网的东西吧,一遍翻译,一遍测试. ...
- Pandaboard ES编译bootloader、xloader、内核、以及安卓系统
Building bootloader and kernel Bootloader Startwith building the bootloader. To learn more about the ...