BZOJ 3931 網路流 最短路)

2022-03-29 09:59:23 字數 1236 閱讀 7223

傳送門

考慮網路流

注意到資料報走的是最短路,所以我們只需要考慮在最短路上的邊

由於最短路可能有多條,我們先跑一遍dijkstra,然後再\(o(m)\) 遍歷每條邊(u,v,w)

如果dist[u]=dist[v]+w,則這條邊肯定在最短路上

然後點的容量限制可以用拆點來解(常見套路),從u向u+n連邊,容量為c[u]

原圖中的邊(u,v)在新圖中變成邊(u+n,v)

然後dinic求最大流即可

#include#include#include#include#include#include#define maxn 1005

#define maxm 200005

#define inf 0x3f3f3f3f3f3f3f3f

using namespace std;

int n,m;

vector>g[maxn];

struct node

node(int u,long long dis)

friend bool operator < (node p,node q)

};long long dist[maxn];

int used[maxn];

void dijkstra()

} }}long long c[maxn];

struct edgee[maxm<<1];

int sz=1;

int head[maxn];

void add_edge(int u,int v,long long w)

int deep[maxn];

bool bfs(int s,int t)

} }return 0;

}long long dfs(int x,int t,long long minf)

} return minf-rest;

}long long dinic(int s,int t)

return maxflow;

}int main()

for(int i=1;i<=n;i++) scanf("%lld",&c[i]);

c[1]=c[n]=inf;

dijkstra();

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

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

} }printf("%lld\n",dinic(1,n*2));

}

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

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

BZOJ3931 網路吞吐量

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

bzoj1834(網路流 費用流)

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。第一問裸的網路流 第二問 新建乙個匯點,將n號點與匯點相連,容量為k,限制最多增大的流量 費用為0 將原先每一條邊都新...