最小費用最大流 hdu 3667

2021-06-20 16:33:49 字數 892 閱讀 7156

/*

學了好幾天了,終於生成了模板

一直以來有乙個問題沒有克服,今天終於想明白了,那就是為什麼要加反向流量呢?

那是因為如果你在加流量的時候如果加多了,,則要溜回去。。。。

*/#include#include#include#include#includeusing namespace std;

const int maxn = 100000;

const int inf = 0x777777;

struct h[maxn];

struct e[10*maxn];

int top;

void add(int u,int v,int cap,int cost)

int d[maxn];

int p[maxn];

int vis[maxn];

int path[maxn];

int max_flow,ans;

bool spfa(int s,int t,int n)}}

}if(d[t] == inf) return false;

int u = t,sum = inf;

while (u!=s)

u = t;

max_flow += sum;

while(u != s)

return true;

}void init()

int main()

}add(0,1,k,0);

add(1,0,0,0);

while(spfa(0,n,n));

if(max_flowprintf("-1\n");

else

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

}}

hdu 3667(拆邊 最小費用最大流)

思路 由於花費的計算方法是a x x,因此必須拆邊,使得最小費用流模板可用,即變成a x的形式。具體的拆邊方法為 第i次取這條路時費用為 2 i 1 a i 5 每條邊的容量為1。如果這條邊通過的流量為x,那正好sigma 2 i 1 1 1 include2 include3 include4 i...

hdu3667 最小費用流 拆邊題

第一道拆邊題 用bellman ford以967ms險過.先說一下大體的題意 輸入n m k 分別指城市的個數 m條邊 現在需要把k個單位的物品從城市1運往城市n 接下來的m行 每一行輸入四個數 u i,v i,a i,ci 代表從城市u到城市v有一條單向路 容量為c 如果在這條路上運送x個單位的物...

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...