| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我记得capacity scaling是O(E^2lgC)的吧In Reply To:您好, 我想了一下, 书上说 最多进行log(f)次迭代,f是最终的最大流数值, 每次迭代O(e), 然后对比一下,和我以前的程序相比,常数应该说比较小,我也是用类似prim的贪心法找最大瓶颈路,指点一下吧 Posted by:semonteer at 2006-06-27 23:16:34 > int EdmondsKarp(Graph C, Graph F,int S, int T, int nV){
> Graph R;
> for(int i = 0; i < nV; i++) for(int j = 0; j < nV; j++){
> R[i][j] = C[i][j];
> F[i][j] = 0;
> }
>
> Path D,P,V;
>
> while(true){
> // printf("AAAA\n");
> for(int i = 0; i < nV; i++) D[i] = -inf;
> for(int i = 0; i < nV; i++) V[i] = 0;
> D[S] = 0;
> for(int i = 0; i < nV; i++){
> int mx = -1;
> for(int j = 0; j < nV; j++){
> if(V[j]||D[j]==-inf) continue;
> if(mx==-1) mx = j;
> else if(D[j]>D[mx]) mx = j;
> }
> if(mx==-1) break;
> V[mx] = 1;
> if(mx==T) break;
> for(int j = 0; j < nV; j++){
> if(V[j]||R[mx][j]<=0) continue;
> if(R[mx][j]>D[j]){
> P[j] = mx;
> D[j] = R[mx][j];
> }
> }
> }
> if(!V[T]) break;
> int u,v,r = inf;
> for(v = T; v != S; v = P[v]){
> r <?= R[P[v]][v];
> }
> for(v = T; v != S; v = P[v]){
> R[P[v]][v] -= r; F[P[v]][v] += r;
> R[v][P[v]] += r; F[v][P[v]] -= r;
> }
> }
>
> int Flow = 0;
> for(int i = 0; i < nV; i++) Flow += F[S][i];
> return Flow;
>
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator