网络吞吐量
(network)
题目描述
路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点。网络中实现
路由转发的硬件设备称为路由器。为了使数据包最快的到达目的地,路由器需要选择最优的路径转发数据包。例如,
在常用的路由算法OSPF(开放式最短路径优先)中,路由器会使用经典的Dijkstra算法计算最短路径,然后尽量沿最短
路径转发数据包。
现在,若已知一个计算机网络中各路由器间的连接情况,以及各个路由器的最大吞吐量(即每秒能转发的数据包数
量),假设所有数据包一定沿最短路径转发,试计算从路由器1到路由器n的网络的最大吞吐量。计算中忽略转发及传
输的时间开销,不考虑链路的带宽限制,即认为数据包可以瞬间通过网络。路由器1到路由器n作为起点和终点,自身
的吞吐量不用考虑,网络上也不存在将1和n直接相连的链路。
输入格式
输入文件第一行包含两个空格分开的正整数n和m,分别表示路由器数量和链路的数量。网络中的路由器使用1到n编
号。
接下来m行,每行包含三个空格分开的正整数a、b和d,表示从路由器a到路由器b存在一条距离为d的双向链路。
接下来n行,每行包含一个正整数c,分别给出每一个路由器的吞吐量。
输出格式
输出一个整数,为题目所求吞吐量。
输入样例
7 10
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
输出样例
70

思路:首先跑最一遍短路,然后显然网络流上的边得是必须边嘛,然后限制是在点上的,因此需要拆点,跑一边maxflow即可

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 400009
#define inf ((1LL<<63)-1)
#define ll long long
using namespace std;
ll head[maxn],next[maxn],point[maxn],now,p[maxn],flow[maxn];
ll n,m,value[maxn],dist[maxn],dis[maxn],x[maxn],y[maxn],v[maxn];
void add(ll x,ll y,ll v)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
value[now]=v;
}
void add2(ll x,ll y,ll v)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
flow[now]=v;
next[++now]=head[y];
head[y]=now;
point[now]=x;
flow[now]=;
}
void spfa(ll s)
{
memset(dist,-,sizeof(dist));
int visit[maxn]={};
visit[s]=;
queue<ll>q;
q.push(s);
dist[s]=;
while(!q.empty())
{
int u=q.front();
q.pop();
visit[u]=;
for(int i=head[u];i;i=next[i])
{
ll k=point[i];
if(dist[k]==- || dist[u]+value[i]<dist[k])
{
dist[k]=dist[u]+value[i];
p[k]=u;
if(!visit[k])
{
visit[k]=;
q.push(k);
}
}
}
}
}
int bfs(ll s,ll t)
{
queue<ll>q;
memset(dis,-,sizeof(dis));
q.push(s);
dis[s]=;
while(!q.empty())
{
ll u=q.front();
q.pop();
for(int i=head[u];i;i=next[i])
{
ll k=point[i];
if(dis[k]==- && flow[i])
{
dis[k]=dis[u]+;
q.push(k);
}
}
}
return dis[t]!=-;
}
ll dfs(ll s,ll d,ll t)
{
if(s==t)return d;
ll res=;
for(int i=head[s];i&&res<d;i=next[i])
{
ll u=point[i];
if(flow[i] && dis[u]==dis[s]+)
{
ll dd=dfs(u,min(flow[i],d-res),t);
if(dd)
{
flow[i]-=dd;
flow[((i-)^)+]+=dd;
res+=dd;
}
}
}
if(res==)dis[s]=-;
return res;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%lld%lld%lld",&x[i],&y[i],&v[i]);
add(x[i],y[i],v[i]);
add(y[i],x[i],v[i]);
}
spfa();
memset(head,,sizeof(head));now=;
for(int i=;i<=m;i++)
{
if(dist[x[i]] + v[i] == dist[y[i]])
{
add2(x[i]+n,y[i],inf);
}
if(dist[y[i]] + v[i] == dist[x[i]])
{
add2(y[i]+n,x[i],inf);
}
}
ll b;
for(int i=;i<=n;i++)
{
scanf("%lld",&b);
add2(i,i + n,(i==||i==n)?inf:b);
}
ll ans=;
while(bfs( ,n + n))
{
ans += dfs( ,inf ,n + n);
}
printf("%lld\n",ans);
return ;
}

3931: [CQOI2015]网络吞吐量【网络流】的更多相关文章

  1. bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...

  2. BZOJ 3931: [CQOI2015]网络吞吐量

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1555  Solved: 637[Submit][Stat ...

  3. BZOJ 3931: [CQOI2015]网络吞吐量 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  4. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

    最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...

  5. 3931: [CQOI2015]网络吞吐量

    3931: [CQOI2015]网络吞吐量 链接 分析: 跑一遍dijkstra,加入可以存在于最短路中的点,拆点最大流. 代码: #include<cstdio> #include< ...

  6. bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3931 [题意] 只能通过1-n的最短路,求网络最大流 [思路] 分别以1,n为起点做最 ...

  7. ●BZOJ 3931 [CQOI2015]网络吞吐量

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...

  8. BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】

    传送门 题意 给你一个 $ n $ 个点,$ m $ 条边的无向网络,每条边有长度.每个点的流量限制为 $ c[i] $ . 要求流量只能经过从 $ 1 $ 的 $ n $ 的最短路.问你最大流是多少 ...

  9. BZOJ 3931: [CQOI2015]网络吞吐量 Dijkstra+最大流

    这个没啥难的. 只保留可以转移最短路的边,然后拆点跑一个最大流即可. #include <bits/stdc++.h> #define N 1004 #define M 250004 #d ...

随机推荐

  1. Oracle汇总

    1.数据库事务并发会产生那些问题?有哪些隔离级别,分别能够避免什么错误,而无法避免什么错误? a.事务并发会导致三种问题:脏读.不可重复读.幻象读 脏读:读取了未提交的数据 不可重复读:前后读取同一行 ...

  2. 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]

        小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...

  3. Android学习总结(十六) ———— MediaPlayer播放音频与视频

    一.基本概念 本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构.Android的MediaPlayer包含了Audio和video的播放功能,在Andr ...

  4. 洛谷 P1438 无聊的数列

    题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...

  5. UVA 1625 Color Length 颜色的长度 (预处理+dp)

    dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费. 转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数 ...

  6. Base64编码密钥时关于换行的几个问题。

    在windows下一个javaweb应用,需要用http传递公钥pk.一般是String pk = BASE64ENCODER.encode(pkBytes);base64编码时,每76个字母就要换行 ...

  7. js函数式编程(三)-compose和pointFree

    compose即函数嵌套组合 组合compose在第一篇已经初见端倪,可以感受一下.compose函数的实现用闭包的方法.不完善实现如下: const compose = (f, g) => { ...

  8. atlas 日志分析脚本

    #!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: log_analyze.py #@time: 2018/8/23 17: ...

  9. ECshop二次开发 ECSHOP首页显示积分商城里的商品

    以ECSHOP2.7.2官方默认模板为基础 1).首先打开 index.php 文件,在最末尾增加下面函数,注意千万不要写到 “?>” 的外面去,要加在“?>”的前面,加以下代码: /** ...

  10. python3.x 多路IO复用补充asyncio

    asyncio模块是python之父写的模块,按说应该是靠谱的,python3.6版本定义为稳定版本. 说明书:https://docs.python.org/3/library/asyncio.ht ...