題目描述
路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由**的硬體裝置稱為路由器。為了使資料報最快的到達目的地,路由器需要選擇最優的路徑**資料報。例如在常用的路由演算法ospf(開放式最短路徑優先)中,路由器會使用經典的dijkstra演算法計算最短路徑,然後盡量沿最短路徑**資料報。現在,若已知乙個計算機網路中各路由器間的連線情況,以及各個路由器的最大吞吐量(即每秒能**的資料報數量),假設所有資料報一定沿最短路徑**,試計算從路由器1到路由器n的網路的最大吞吐量。計算中忽略**及傳輸的時間開銷,不考慮鏈路的頻寬限制,即認為資料報可以瞬間通過網路。路由器1到路由器n作為起點和終點,自身的吞吐量不用考慮,網路上也不存在將1和n直接相連的鏈路。
輸入輸出格式
輸入格式:
輸入檔案第一行包含兩個空格分開的正整數n和m,分別表示路由器數量和鏈路的數量。網路中的路由器使用1到n編號。接下來m行,每行包含三個空格分開的正整數a、b和d,表示從路由器a到路由器b存在一條距離為d的雙向鏈路。 接下來n行,每行包含乙個正整數c,分別給出每乙個路由器的吞吐量。
輸出格式:
輸出乙個整數,為題目所求吞吐量。
輸入輸出樣例
輸入樣例#1:
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 輸出樣例#1:
70 說明
對於100%的資料,n<=500,m<=100000,d,c<=10^9
【分析】
題面=題解系列
先求一遍spfa,然後把不是最短路的邊刪掉…然後拆點限制容量跑一邊dinic…
【**】
#include
#include
#include
#include
#define ll long long
#define fo(i,j,k) for(i=j;i<=k;i++)
using
namespace
std;
const ll inf=1e16;
const
int mxn=505;
queue
q;ll n,m,s,t,cnt;
ll d[mxn],dis[mxn];
ll head[mxn],vis[mxn],x[mxn],y[mxn],d[mxn];
struct edge f[200005];
inline ll read()
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}inline
void add(int u,int v,ll d)
inline
void add2(int u,int v,ll flow)
inline
void spfa()}}
}inline
bool bfs()
}if(dis[t]>0) return
1; return0;}
inline ll find(ll u,ll low)
}if(!sum) dis[u]=-1;
return sum;
}int main()
spfa();
memset(head,0,sizeof head);
memset(f,0,sizeof f);cnt=0;
fo(i,1,m)
fo(i,1,n)
add2(s,1,inf),add2(n+n,t,inf);
while(bfs())
ans+=find(s,inf);
printf("%lld\n",ans);
return
0;}
P3171 CQOI2015 網路吞吐量
題目描述 路由是指通過計算機網路把資訊從源位址傳輸到目的位址的活動,也是計算機網路設計中的重點和難點。網路中實現路由 的硬體裝置稱為路由器。為了使資料報最快的到達目的地,路由器需要選擇最優的路徑 資料報。例如在常用的路由演算法ospf 開放式最短路徑優先 中,路由器會使用經典的dijkstra演算法...
洛谷 P3168 CQOI2015 任務查詢系統
咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕 kono題面噠!最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組 s i,e i,p i 描述,s i,e i,p i 表示任務從第 s i 秒開始,在第 e i 秒後結束 第 s i...
洛谷 CQOI2015 選數 解題報告
我們知道,從區間 l,h l 和 h 為整數 中選取 n 個整數,總共有 h l 1 n 種方案。小 z 很好奇這樣選出的數的最大公約數的規律,他決定對每種方案選出的 n 個整數都求一次最大公約數,以便進一步研究。然而他很快發現工作量太大了,於是向你尋求幫助。你的任務很簡單,小 z 會告訴你乙個整數...