P3171 CQOI2015 網路吞吐量

2021-10-02 13:25:05 字數 1997 閱讀 4970

題目描述

路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由**的硬體裝置稱為路由器。為了使資料報最快的到達目的地,路由器需要選擇最優的路徑**資料報。例如在常用的路由演算法ospf(開放式最短路徑優先)中,路由器會使用經典的dijkstra演算法計算最短路徑,然後盡量沿最短路徑**資料報。現在,若已知乙個計算機網路中各路由器間的連線情況,以及各個路由器的最大吞吐量(即每秒能**的資料報數量),假設所有資料報一定沿最短路徑**,試計算從路由器1到路由器n的網路的最大吞吐量。計算中忽略**及傳輸的時間開銷,不考慮鏈路的頻寬限制,即認為資料報可以瞬間通過網路。路由器1到路由器n作為起點和終點,自身的吞吐量不用考慮,網路上也不存在將1和n直接相連的鏈路。

輸入格式

輸入檔案第一行包含兩個空格分開的正整數n和m,分別表示路由器數量和鏈路的數量。網路中的路由器使用1到n編號。接下來m行,每行包含三個空格分開的正整數a、b和d,表示從路由器a到路由器b存在一條距離為d的雙向鏈路。 接下來n行,每行包含乙個正整數c,分別給出每乙個路由器的吞吐量。

輸出格式

輸出乙個整數,為題目所求吞吐量。

題解:根據題意,因為每次都要走最短路,所以我們把所有最短路上的邊建圖然後跑網路流即可

ac**:

#pragma gcc optimize(2)

#include

#include

using

namespace std;

using

namespace __gnu_cxx;

#define int long long

#define pii pair

#define mp(a,b) make_pair(a,b)

const

int maxn =

2e5+50;

const

int maxm =

2e5+50;

const

int mod =

1e9+7;

const

int inf =

0x3f3f3f3f

;int n,m,s,t,tot=

1,head[maxn]

,nxt[maxm]

,to[maxm]

,w[maxn]

,h[maxn]

;int a[maxn]

,b[maxn]

,c[maxn]

,g[505][

505]

;inline

void

ade(

int u,

int v,

int ww)

inline

void

add(

int u,

int v,

int w)

inline

intbfs()

}}return h[t];}

inline

intdfs

(int x,

int f)}if

(!fl) h[x]=-

1;return fl;

}inline

intdinic()

inline

void

floyd()

signed

main()

floyd()

; s=

1+n,t=n;

for(

int i=

1,x;i<=n;i++

)scanf

("%lld"

,&x)

,add

(i,i+n,

((i==

1|| i==n)

? inf:x));

for(

int i=

1;i<=m;i++

)printf

("%lld\n"

,dinic()

);return0;

}

洛谷 P3171 CQOI2015 網路吞吐量

題目描述 路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由 的硬體裝置稱為路由器。為了使資料報最快的到達目的地,路由器需要選擇最優的路徑 資料報。例如在常用的路由演算法ospf 開放式最短路徑優先 中,路由器會使用經典的dijkstra演算法...

BZOJ P3931 CQOI2015 網路吞吐量

先跑一遍最短路 把最短路上的點建乙個圖,然後需要拆點,因為權值在點上面 然後拆點限制流量 最後跑一邊最大流就可以了 include include include include includeusing namespace std int head 100003 exhead 100003 q 4...

CQOI2015 網路吞吐量

路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由 的硬體裝置稱為路由器。為了使資料報最快的到達目的地,路由器需要選擇最優的路徑 資料報。例如在常用的路由演算法ospf 開放式最短路徑優先 中,路由器會使用經典的dijkstra演算法計算最短路...