今天上午我彷彿知道了什麼叫做網路流,這裡推薦一篇部落格,大家入門網路流的可以看一下這篇部落格,保證一看就懂!
//codevs 1993
#include
#include
#include
#include
using
namespace
std;
const
int inf=0x7ffffff;
queue
q;int n,m,x,y,s,t,g[201][201],pre[201],flow[201],maxflow;
//g鄰接矩陣存圖,pre增廣路徑中每個點的前驅,flow源點到這個點的流量 (就是増廣路(min))!
inline
int bfs(int s,int t)
}if (pre[t]==-1) return -1;//死啦!
else
return flow[t];
}//increase為增廣的流量
void ek(int s,int t)
maxflow+=increase;//增加増廣路
}}int main()
ek(1,n);
printf("%d",maxflow);
return
0;}
下面大家就會發現乙個問題,用鄰接矩陣儲存,是不是也太費空間了,要是題目讓你跑乙個有10000個點的網路流豈不涼涼!!!
下面就要獻上我們改裝過的ek演算法!(說白了就是dinic)
#include
using
namespace
std;
struct listxedge[200005];
int cnt=0,n,m,s,t;
int head[10005];
int depth[10005];
void update(int num,int flow)
void addedge(int u,int v,int w)
bool bfs()
que.push(s);
depth[s]=1;
while(!que.empty())}}
if(depth[t]==0)
return
false;
return
true;
}int dfs(int u,int flow)}}
return
0;
}int main()
while(bfs())
}printf("%d",ans);
return
0;}
網路流 EK演算法
ek演算法的思路 基於貪心的思想,每次選取一條起點到終點的路徑,毋庸置疑,這條路的流量就等於這條路徑上的權值是最小值。將這條路的權值都減去流量,再將路徑的反向邊加上流量 這樣可以就給貪心一次反悔的機會 無限迴圈以上步驟,到找不到任何一條起點到終點的路,最後所有的最小值加起來就是最大流了。這只是我對e...
網路流 費用流Ek演算法講解
前一篇部落格寫的是最大流。先簡要說一下思路,方便下面的講解。最大流求解是先跑一遍bfs,把每個點定義乙個深度,跑dfs的同時連線一條反向邊方便反悔,避免不必要的時間。現在說一下費用流。費用流的全稱是最小費用最大流 或最大費用最大流 保證最小費用的情況下跑最大流。最小費用?bfs spfa成功解決。我...
網路流最大流 EK演算法
網路流是模仿水流解決生活中類似問題的一種方法策略,來看這麼乙個問題,有乙個自來水廠s,它要向目標t提供水量,從s出發有不確定數量和方向的水管,它可能直接到達t或者經過更多的節點的中轉,目前確定的是每條水管中水流的流向是確定的 單向 且每個水管單位時間內都有屬於自己的水流量的上限 超過會爆水管 問題是...