此题数据太水

P3376 【模板】网络最大流

Starlight_Glimmer @ 2019-07-14 21:52:07

RT 写的EK算法 邻接矩阵会MLE 就把板改成了邻接表版本的 蒟蒻一时脑残 忘记了反向边这种事情 然后结果还A了

//EK 邻接表vector版本 能过luogu3376 
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define MAXN 10005
#define LL long long
#define INF 0x3f3f3f3f 
int n,m,s,t,flow;
struct node{
    int v,w;
};
vector<node>cap[MAXN];//残留网络
int aug[MAXN];//s-i路径上的残留容量 
node p[MAXN];//前驱
int bfs()
{
    int u,v;
    queue<int>Q;
    memset(aug,0,sizeof(aug));
    aug[s]=INF;
    Q.push(s);
    while(!Q.empty())
    {
        u=Q.front();
        Q.pop();
        for(int i=0;i<cap[u].size();i++)
        {
            int v=cap[u][i].v,w=cap[u][i].w;
            if(aug[v]==0&&w)
            {
                aug[v]=min(aug[u],w);
                p[v].v=u,p[v].w=i;
                if(v==t) return aug[t];
                Q.push(v);
            }
        }
        /*for(int v=1;v<=n;v++)
        {
            if(aug[v]==0&&cap[u][v])
            {
                aug[v]=min(aug[u],cap[u][v]);
                p[v]=u;
                if(v==t) return aug[t];
                Q.push(v);
            }
        }*/
    }
    return 0;
}
void EK()
{
    int u,v,delta;
    while(1)
    {
        delta=bfs();
        if(delta==0) break;//找不到增广路 结束算法
        for(v=t;v!=s;v=u)//修改增广路上的残留容量
        {
            u=p[v].v;
            int i=p[v].w;
            cap[u][i].w-=aug[t];
            //这里...不知道怎么改反向的那个 但是能过luogu板题qwq 
            /*cap[u][v]-=aug[t];//更新残留网络 
            cap[v][u]+=aug[t];*/
        }
        flow+=delta;
    }
} 
int main()
{
    scanf("%d %d %d %d",&n,&m,&s,&t);
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        scanf("%d %d %d",&u,&v,&w);
        node tmp;
        tmp.v=v,tmp.w=w;
        cap[u].push_back(tmp);
        //cap[u][v]+=w;
        //cap[v][u]+=w;//无向边 
    }
    EK();
    printf("%d\n",flow);
    return 0;
} 

by DocMander‮ @ 2019-07-19 10:40:28

tql %%%


by bfxbfx @ 2019-07-28 00:13:45

对对对 ,我也发现这个问题,所以特意翻开讨论区,果然也有人发现了,我是反向边操作犯了个大错,改了后AC,但是之前有错的时候发现样例没错,就把加反向边删了试着交了一下,然而还是全AC了,数据太过于水了


|