【BZOJ-3931】网络吞吐量 最短路 + 最大流
3931: [CQOI2015]网络吞吐量
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 1228 Solved: 524
[Submit][Status][Discuss]
Description
路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点。网络中实现路由转发的硬件设备称为路由器。为了使数据包最快的到达目的地,路由器需要选择最优的路径转发数据包。例如在常用的路由算法OSPF(开放式最短路径优先)中,路由器会使用经典的Dijkstra算法计算最短路径,然后尽量沿最短路径转发数据包。现在,若已知一个计算机网络中各路由器间的连接情况,以及各个路由器的最大吞吐量(即每秒能转发的数据包数量),假设所有数据包一定沿最短路径转发,试计算从路由器1到路由器n的网络的最大吞吐量。计算中忽略转发及传输的时间开销,不考虑链路的带宽限制,即认为数据包可以瞬间通过网络。路由器1到路由器n作为起点和终点,自身的吞吐量不用考虑,网络上也不存在将1和n直接相连的链路。
Input
输入文件第一行包含两个空格分开的正整数n和m,分别表示路由器数量和链路的数量。网络中的路由器使用1到n编号。接下来m行,每行包含三个空格分开的正整数a、b和d,表示从路由器a到路由器b存在一条距离为d的双向链路。 接下来n行,每行包含一个正整数c,分别给出每一个路由器的吞吐量。
Output
输出一个整数,为题目所求吞吐量。
Sample Input
1 2 2
1 5 2
2 4 1
2 3 3
3 7 1
4 5 4
4 3 1
4 6 1
5 6 2
6 7 1
1
100
20
50
20
60
1
Sample Output
HINT
对于100%的数据,n≤500,m≤100000,d,c≤10^9
Source
Solution
傻逼题,卡我!
跟着题意走,先求最短路,然后利用最短路径建图跑最大流,简言之就是两个模板
PS自己的Code在BZOJ上被卡T了但COGS上跑的飞快,于是直接黏贴黄学长的
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define maxn 1000
#define maxm 1000010
int n,m;
struct EdgeNode{int to,next;long long cap;}edge[maxm];
struct RoadNode{int to,next,len;}road[maxn<<];
int head[maxn<<],cnt=,last[maxn],tot;
void addroad(int u,int v,int w) {tot++; road[tot].to=v; road[tot].next=last[u]; last[u]=tot; road[tot].len=w;}
void insertroad(int u,int v,int w) {addroad(u,v,w); addroad(v,u,w);}
void addedge(int u,int v,long long w) {cnt++; edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v; edge[cnt].cap=w;}
void insertedge(int u,int v,long long w) {addedge(u,v,w); addedge(v,u,);}
long long dis[maxn]; int s,t; bool visit[maxn];
#define inf 1000000000000000LL
void spfa()
{
for (int i=s; i<=t; i++) dis[i]=inf;
queue<int>q; q.push(s); visit[s]=; dis[s]=;
while (!q.empty())
{
int now=q.front(); q.pop(); visit[now]=;
for (int i=last[now]; i; i=road[i].next)
if (dis[road[i].to]>dis[now]+road[i].len)
{
dis[road[i].to]=(long long)(dis[now]+road[i].len);
if (!visit[road[i].to])
visit[road[i].to]=,q.push(road[i].to);
}
}
}
int h[maxn<<],cur[maxn<<],S,T;
bool bfs()
{
queue<int>q;
for (int i=S; i<=T; i++) h[i]=-;
q.push(S); h[S]=;
while (!q.empty())
{
int now=q.front(); q.pop();
for (int i=head[now]; i; i=edge[i].next)
if (edge[i].cap && h[edge[i].to]==-)
h[edge[i].to]=h[now]+,q.push(edge[i].to);
}
return h[T]!=-;
}
long long dfs(int loc,long long low)
{
if (loc==T) return low;
long long w,used=;
for (int i=cur[loc]; i; i=edge[i].next)
if (edge[i].cap && h[edge[i].to]==h[loc]+)
{
w=dfs(edge[i].to,min(low-used,(long long)edge[i].cap));
edge[i].cap-=w; edge[i^].cap+=w; used+=w;
if (used==low) return low; if (edge[i].cap) cur[loc]=i;
}
if (!used) dis[loc]=-;
return used;
} long long dinic()
{
long long tmp=;
while (bfs())
{
for (int i=S; i<=T; i++) cur[i]=head[i];
tmp+=dfs(S,inf);
}
return tmp;
}
int tt[maxn],uu[maxm],vv[maxm],ww[maxm];
int main()
{
freopen("cqoi15_network.in","r",stdin);
freopen("cqoi15_network.out","w",stdout);
n=read(),m=read();
for (int i=; i<=m; i++) uu[i]=read(),vv[i]=read(),ww[i]=read(),insertroad(uu[i],vv[i],ww[i]);
s=,t=n; spfa();
for (int i=; i<=n; i++) tt[i]=read();
S=; T=n*+;
for (int i=; i<=n-; i++) insertedge(i,i+n,(long long)tt[i]);
insertedge(S,,inf); insertedge(,+n,inf); insertedge(n,n+n,inf); insertedge(n+n,T,inf);
for (int i=; i<=m; i++)
{
if (dis[uu[i]]+ww[i]==dis[vv[i]]) insertedge(uu[i]+n,vv[i],inf);
if (dis[vv[i]]+ww[i]==dis[uu[i]]) insertedge(vv[i]+n,uu[i],inf);
}
printf("%lld\n",dinic());
return ;
}
BZOJ上精神AC,傻逼题爱咋咋地,反正读完题直接出正解,就这傻逼题,蛋爷当年能写一周?
COGS上效果图:

【BZOJ-3931】网络吞吐量 最短路 + 最大流的更多相关文章
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...
- BZOJ 3931 网络吞吐量(最短路+拆点最大流)
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1607 Solved: 652 [Submit][St ...
- 网络流(最大流) CQOI 2015 BZOJ 3931 网络吞吐量
3931: [CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活 动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器 ...
- 【bzoj3931】[CQOI2015]网络吞吐量 最短路+最大流
题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路由器需要选择最优的路径转发 ...
- bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
- [bzoj3931][CQOI2015]网络吞吐量——最短路+网络流
题目 传送门 题解 第一次一遍就AC一道bzoj上的题,虽然是一道水题... 我们做一边最短路,求出每个点的dist,然后再做一次类似spfa的操作,求出每个点是否可以用于建图. 在新图上拆点跑一边d ...
- BZOJ 3931: [CQOI2015]网络吞吐量 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- 【BZOJ】【3931】【CQOI2015】网络吞吐量
最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ /********************** ...
- BZOJ 3931: [CQOI2015]网络吞吐量
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1555 Solved: 637[Submit][Stat ...
随机推荐
- Debian 8(Jessie) 安装自带Mysql
执行命令 sudo apt-get install mysql-server 这会把mysql-client也装上, 版本都是5.5. 安装过程中会提示你输入两遍root口令. 用ps aux|gre ...
- 036医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Action层
这篇文章我们来讲Action层: 我们先讲开发步骤: 1:我们要根据Service层里面要传的参数,在Action层传入对应的参数. Service层是:public void insertGysym ...
- [转]源代码的管理和发布:以SVN为例
FROM : http://ju.outofmemory.cn/entry/47277 前几天在微博吐槽了SVN的几个不爽的地方:.svn文件满天飞.分支管理的麻烦.不爽一般来说都是有过对比后才有如此 ...
- Implement Queue using Stacks
Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...
- 关于div标签的title属性一闪一闪不正常显示的原因
弹出了chrome的开发工具就会出现以上问题.
- 支付宝Cookie高危漏洞引发的思考
背景:当时我在做公司的网站支付接入,在调试支付宝WAP支付时,发现一些匪夷所思的事情: 1.我想要切换账号时退到需要输入登录信息时,原账号并没有退出,我按一下后退键又回来了: 2.我关闭浏览器也没有退 ...
- js时间倒计时
看了网上的其他的例子,觉得写的都有点复杂,不好理解,于是自己动手写了个. 本来想封装成jquery插件,但是觉得因为功能很简单,没有必要做成jquery插件,引用的时候不需要引入jqery库,这里直接 ...
- iOS 自定义NavigationBar右侧按钮rightBarButtonItem--button
//两个按钮的父类view UIView *rightButtonView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; //历史浏览按钮 ...
- [Elasticsearch] 全文搜索 (一) 基础概念和match查询
全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...
- [转]JAVA设计模式之单例模式
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...