題目大意:
有n所銀行,有m輛巡警車,給出巡警車到各個銀行所需要的距離,問平均最小的距離是多少。
思路:
最小費用最大流的問題。
構造乙個超級源點,然後連線邊到各輛巡警車,巡警車與各所銀行相連線,容量為1,費用為k。先求出費用最小的路,然後在費用最小的路上增流
**:
#include
using
namespace
std;
#include
#include
#include
int n,m;
#define eps 1e-6
const
int max = 102;
const
int inf = 0x3f3f3f3f;
struct node e[10000];
int first[max],p[max];
double dis[max];
int vis[max];
int edgenum;
int f;
int s,t;
double c;
void add(int u,int v,int cap,double w)
void ek() }}
}if(dis[t] == inf)
break;
int a = inf;
for(int u = p[t];u != -1; u = p[e[u^1].v])
a = min(a,e[u].cap - e[u].flow);
for(int u = p[t];u != -1; u = p[e[u^1].v])
c += dis[t] *(double)a;//因為a肯定為1,所以無所謂有沒有乘
f += a;
}}int main()
for(int i = 1; i <= n; i++)
}for(int i = m + 1; i <= n + m; i++)
ek();
printf("%.2f\n",c/n + eps);
}return
0;}
uva10806 (最小費用最大流)
題意 從1到n 再從n到1 不經過重複的邊 如果是點就是旅行商問題了 問最短路 思路 最小費用最大流 建立乙個超級源 它的容量為2,到第乙個點的費用為0 然後每個連線的點的容量為1 只要找出兩條最小費用的路 那麼就可以了。include using namespace std include inc...
uva 10594(最小費用最大流)
題意 在乙個無向網路中,告訴你邊的容量與費用。現在需要傳送d個資料問你你否能傳送成功,若成功則最小費用是多少。思路 顯然是最小費用最大流問題,這道題的見圖比較簡單。只需要新增乙個原點費用為d指向1就行了。接下來的事情就是套模版了。如下 1 include 2 include 3 include 4 ...
最小費用最大流
網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...