网络吞吐量
(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. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  2. leetcode_1053. Previous Permutation With One Swap

    1053. Previous Permutation With One Swap https://leetcode.com/problems/previous-permutation-with-one ...

  3. 用dfs求联通块(UVa572)

    一.题目 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符所在的格子相邻(横.竖.或者对角线方向),就说它们属于同一个八连块. 二.解题思路 和前面的二叉树遍历类似,图也有DF ...

  4. nginx “403 Forbidden” 错误 解决方法

    错误的原因是缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件 只需要配置时加一句  index  index.h ...

  5. django连接Oracle过程中出现的问题

    开始时版本信息: python 3.6   +   ce_oracle 6 最终版本信息: python 3.5   + ce_oracle 5.2 ce_oracle版本问题 cx_Oracle-5 ...

  6. Robot Framework(十) 执行测试用例——测试执行

    3.2测试执行 本节描述如何执行从解析的测试数据创建的测试套件结构,如何在失败后继续执行测试用例,以及如何正常停止整个测试执行. 3.2.1执行流程 执行套房和测试 设置和拆卸 执行顺序 3.2.2继 ...

  7. 火狐浏览器返回不加载JS

    火狐浏览器 go(-1),返回后不加载JS,谷歌会加载. 总结: Firefox和Safari在back时不会触发load, ready事件! 解决方法: $(window).unload(funct ...

  8. javascript的trigger事件

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  9. 【整理】C#文件操作大全

    文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msdn:http://msdn.microsof ...

  10. HTML5<picture>元素

    HTML5<picture>元素可以设置多张图片 <!DOCTYPE html><html><head><meta http-equiv=&quo ...