傳送門
考慮網路流
注意到資料報走的是最短路,所以我們只需要考慮在最短路上的邊
由於最短路可能有多條,我們先跑一遍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 將原先每一條邊都新...