Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define mx 103
- int dp[mx][mx], m_f, f, n, s, t, p[mx];
- void augmentpath(int u, int minflow){
- if(u==s){
- f = minflow;
- return;
- }
- else if(p[u]!=-1){
- augmentpath(p[u], min(dp[p[u]][u], minflow));
- dp[p[u]][u] -= f;
- dp[u][p[u]] += f;
- }
- }
- void edmondkarp(){
- m_f = 0;
- while(1){
- f = 0;
- queue <int> q;
- int dist[n+5];
- q.push(s);
- memset(dist, 0, sizeof dist);
- memset(p, -1, sizeof p);
- dist[s] = 1;
- while(!q.empty()){
- int u = q.front();
- q.pop();
- if(u==t) break;
- for(int i=1;i<=n;i++){
- int v = i;
- if((dp[u][v]>0)&&(!dist[v])){
- dist[v] = 1;
- q.push(v);
- p[v] = u;
- }
- }
- }
- augmentpath(t, 99999999);
- //cout << f << endl;
- if(f==0) break;
- m_f+=f;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement