bzoj3931 網路流 最短路 網路吞吐量

2021-08-14 20:24:10 字數 2324 閱讀 8019

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

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

sample output

hint

對於100%的資料,n≤500,m≤100000,d,c≤10^9

題解

半個月沒打**的辣雞手感導致打錯模版。。

原圖spfa之後最短路上重建圖跑網路流,記得拆點。。

判一條邊能構成最短路,設這條邊連的點是u,v

d[u]+edge.c=d[v],該邊能構成最短路

之後u拆點v拆點,u出的點連向v進的點。。流量inf

輸入的吞吐量拆點,u進的點連向u出的點,流量為給出的值

inf要開大點。。因為這個10^9

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const ll inf=1000000000000000ll;

struct node

a[1110000];int len,last[210000];

struct edgee[110000];

void ins(int x,int y,ll c)

void insx(int x,int y,ll c)

intlist[51000],n,m;

ll d[1100];

int head,tail;

bool v[1100];

queue

q;void spfa()}}

q.pop();

v[x]=false;

}}void build()

}int h[1100],st,ed;

bool bt_h()

}head++;

}if(h[ed]>0)return

true;

return

false;

}ll findflow(int x,ll f)

int main()

spfa();

build();

for(int i=1;i<=n;i++)

st=n*2+1;ed=n*2+2;

insx(1,1+n,inf);insx(n,n+n,inf);

insx(st,1,inf);insx(n+n,ed,inf);

ll ans=0;

while(bt_h())ans+=findflow(st,inf);

printf("%lld\n",ans);

return

0;}

BZOJ 3931 網路流 最短路)

傳送門 考慮網路流 注意到資料報走的是最短路,所以我們只需要考慮在最短路上的邊 由於最短路可能有多條,我們先跑一遍dijkstra,然後再 o m 遍歷每條邊 u,v,w 如果dist u dist v w,則這條邊肯定在最短路上 然後點的容量限制可以用拆點來解 常見套路 從u向u n連邊,容量為c...

BZOJ3931 網路吞吐量

time limit 10 sec memory limit 512 mb submit 1692 solved 697 submit status discuss 路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由 的硬體裝置稱為路由器。為了...

zoj 2760 最短路 網路流

題意 求乙個有向圖起點到終點的邊不相交的最短路徑的條數。思路 曾經乙個求最短路的類似,這題你找出來所有的最短路所包含的邊就可以,然後跑一邊網路流即可 include using namespace std const int maxn 400 const int maxm 160000 const ...