sgu 194 上下界最大流 此代碼SGU瞬間過,ZOJ瞬間WA

來源:互聯網
上載者:User

直接上代碼,沒什麼好說的。

#include<stdio.h>#include<string.h>#define LMT 205#define eps 3e8typedef struct{    int u,v;}line;line e[LMT*LMT];int mat[LMT][LMT],fmat[LMT][LMT],q[LMT],lev[LMT],lim[LMT][LMT];int n,m;int bfs(int s,int t){    int head,tail,i,j;    memset(lev,0,sizeof(lev));    head=tail=0;    q[tail++]=s;lev[s]=1;    while(head<tail)    {        i=q[head++];        for(j=0;j<=n+1;j++)        if(fmat[i][j]>0&&0==lev[j])        {            lev[j]=lev[i]+1;            q[tail++]=j;        }    }    return lev[t]!=0;}int dfs(int s,int t){    int i,j,top=0,ret=0;    q[top++]=s;    while(top>0)    {        i=q[top-1];        if(i==t)        {            int min,back;            min=eps;            for(i=1;i<top;i++)            if(min>fmat[q[i-1]][q[i]])            {                min=fmat[q[i-1]][q[i]];                back=i;            }            ret+=min;            for(i=1;i<top;i++)            {                fmat[q[i-1]][q[i]]-=min;                fmat[q[i]][q[i-1]]+=min;            }            top=back;        }        else        {            for(j=0;j<=n+1;j++)            if(fmat[i][j]>0&&lev[j]==lev[i]+1)            {                q[top++]=j;                break;            }            if(j>n+1)            {                lev[i]=0;                top--;            }        }    }    return ret;}int dinic(int s,int t){    int ret=0;    while(bfs(s,t))    {       ret+=dfs(s,t);    }    return ret;}int main(){    int i,j,t,sum,N;        scanf("%d%d",&n,&m);        memset(fmat,0,sizeof(fmat));        memset(mat,0,sizeof(lim));        t=0;        for(t=0;t<m;t++)        {            scanf("%d%d",&i,&j);            scanf("%d%d",&lim[i][j],&mat[i][j]);            e[t].u=i;            e[t].v=j;        }        sum=0;        for(i=1;i<=n;i++)        {            t=0;            for(j=1;j<=n;j++)             if(i!=j)             {              fmat[i][j]=mat[i][j]-lim[i][j];              t+=lim[i][j]-lim[j][i];             }          if(t>0)          {           fmat[i][n+1]=t;           sum+=t;          }          else fmat[0][i]=-t;        }        dinic(0,n+1);        for(i=1;i<=n;i++)        if(fmat[0][i]||fmat[i][n+1])        {            printf("NO\n");            break;        }        if(i>n)        {            printf("YES\n");            for(i=0;i<m;i++)printf("%d\n",lim[e[i].u][e[i].v]+fmat[e[i].v][e[i].u]);        }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.