ek演算法模板 演算法複雜度 n*m*m (n為點數,m為邊數) 源點 1, 匯點 n。
const int maxn=310,inf=0x7fffffff;
int pre[maxn],mat[maxn][maxn];
bool vis[maxn];
int n,m;
int augment()
else q.push_back(i);}}
}if(!fnd) return 0;
v=m;
int mi=inf;
while(pre[v])
v=m;
while(pre[v])
return mi;
}
例題 poj 1273 drainage ditches
#include #include #include #include #include #include using namespace std;
const int maxn=310,inf=0x7fffffff;
int pre[maxn],mat[maxn][maxn];
bool vis[maxn];
int n,m;
int augment()
else q.push_back(i);}}
}if(!fnd) return 0;
v=m;
int mi=inf;
while(pre[v])
v=m;
while(pre[v])
return mi;
}int main()
int ans=0,aug;
while(aug=augment())
cout時間複雜度 o(n*n*e) (推薦)
struct nodeedge[maxn<<1];
int head[maxn];
int cnt,dis[maxn],n,m,ans;
void init()
void add(int a,int b,int c)
bool bfs()}}
if(dis[m]<0) return 0;
return 1;
}int fnd(int x,int low)
}return 0;
}void dinic()
printf("%d\n",ans);
}
各種優化:
#include #include #include #include #define inf 0x3f3f3f3f3f3f3f3f
#define ll long long
#define maxn 10005
using namespace std;
int n,m;//點數、邊數
int sp,tp;//原點、匯點
struct node
mp[maxn*10];
int pre[maxn],dis[maxn],cur[maxn];//cur為當前弧優化,dis儲存分層圖中每個點的層數(即到原點的最短距離),pre建鄰接表
int cnt=0;
void init()//不要忘記初始化
void add(int u,int v,int w)//加邊
bool bfs()//建分層圖
} }
return dis[tp]!=-1;
} ll dfs(int u,ll cap)//尋找增廣路
} if(!res)
dis[u]=-1;
return res;
} ll dinic()
return ans;
} int main()
當前弧優化的dinic
#include #include #include #include #include #include using namespace std;
const int maxn=1e5+10,inf=0x7fffffff;
int n,m,f,e,s,t;
struct edge
};
struct dinic
void addedge(int a,int b,int c)
bool bfs()
} }
return vis[t];
} int dfs(int x,int cap)
return flow;
} }dc;
poj 1273
#include #include #include #include #include #include using namespace std;
const int maxn=310,inf=0x7fffffff;
struct nodeedge[maxn<<1];
int head[maxn];
int cnt,dis[maxn],n,m,ans;
void init()
void add(int a,int b,int c)
bool bfs()}}
if(dis[m]<0) return 0;
return 1;
}int fnd(int x,int low)
}return 0;
}void dinic()
printf("%d\n",ans);
}int main()
dinic();
}return 0;
}
網路流演算法
問題描述 如圖4 1所示是聯結某產品地v1和銷售地v4的交通網,每一弧 vi,vj 代表從vi到vj的運輸線,產品經這條弧由vi輸送到vj,弧旁的數表示這條運輸線的最大通過能力。產品經過交通網從v1到v4。現在要求制定乙個運輸方案使從v1到v4的產品數量最多。圖 4 1 圖 4 2 一 基本概念及相...
網路流演算法
網路流演算法 網路流演算法用於解決從源點到匯點最大流的問題。edmonds karp演算法 演算法主要思想 每次bfs找到一條從源點到匯點的最少路徑數的可行路徑,同時把這條路徑塞滿,這條路上的最小容量即為這條路徑的流量。然後將這條路徑的正向邊刪除,增加一條容量相同的反向邊,當bfs無法進行下去的時候...
網路流演算法
看見了一篇非常不錯的博文 1 容量限制 2 流量守恆 3 斜對稱性 x向y流了f的流 y就向x流了 f的流 殘留網路 容量網路 流量網路 這個等式是始終成立的 殘留值當流量值為負時甚至會大於容量值 流量值為什麼會為負?有正必有負,記住斜對稱性 最短路徑增廣演算法 增廣路方法是很多網路流演算法的基礎 ...