萌新求教

P3376 【模板】网络最大流

小菜鸟111 @ 2018-10-24 13:38:32

T了样例qwq

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int INF=99999999;
struct ha{
    int t,v;
};
vector<ha>q[10010];
int n,m,s,t,pre[10010],flow[10010],maxf;
int bfs(int s,int t){
    queue<int>p;
    memset(pre,-1,sizeof(pre));
    pre[s]=0;
    p.push(s);
    flow[s]=INF;
    while(!p.empty()){
        int x=p.front();
        p.pop();
        if(x==t) break;
        for(int i=0;i<q[x].size();i++)
            if(pre[q[x][i].t]==-1){
                pre[q[x][i].t]=x;
                flow[q[x][i].t]=min(flow[x],q[x][i].v);
                p.push(q[x][i].t);
            }
    }
    if(pre[t]==-1) return -1;
    return flow[t];
}
void haha(int s,int t){
    int c=0;
    while((c=bfs(s,t))!=-1){
        int k=t;
        while(k!=s){
            int last=pre[k];
            for(int i=0;i<q[k].size();i++)
                if(q[k][i].t==last)
                    q[k][i].v+=c;
            for(int i=0;i<q[last].size();i++)
                if(q[last][i].t==k)
                    q[last][i].v-=c;
            k=last;
        }
        maxf+=c;
    }
}
int main(){
    cin>>n>>m>>s>>t;
    for(int i=1;i<=m;i++){
        int x,y,z;
        ha k;
        cin>>x>>y>>z;
        k.t=y;k.v=z;
        q[x].push_back(k);
    }
    haha(s,t);
    cout<<maxf;
    return 0;
}

by hyfhaha @ 2018-10-24 13:54:05

T了样例。。。


by Lstdo @ 2018-10-24 13:59:44

怕不是死循环


by Celebrate @ 2018-10-24 19:12:18

就我一个用预流推进的吗


|