码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷P3381——费用流模板题

时间:2017-05-02 23:42:28      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:set   sed   bool   ext   ret   tchar   tail   min   cstring   

嗯。。随便刷了一道费用流的模板题。。。。来练练手。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int h[5210],d[5210],used[5210],que[100010],last[5210];
int k=1,INF=0x7fffffff,ans1=0,ans2=0;
inline int read(){
    int t=1,num=0;
    char c=getchar();
    while(c>9||c<0){if(c==-)t=-1;c=getchar();}
    while(c>=0&&c<=9){num=num*10+c-0;c=getchar();}
    return num*t;
}
struct edge{
    int to,cap,cost,next;
}g[120010];
void add(int f,int t,int c1,int c2){
    g[++k].next=h[f];h[f]=k;g[k].to=t;g[k].cap=c1;g[k].cost=c2;
    g[++k].next=h[t];h[t]=k;g[k].to=f;g[k].cap=0;g[k].cost=-c2;
}
bool spfa(int s,int t){
    memset(last,0,sizeof(last));
    memset(d,127/3,sizeof(d));INF=d[0];
    memset(used,0,sizeof(used));
    int tail,head;
    head=tail=50002;
    que[head]=s;used[s]=1;d[s]=0;
    while(head>=tail){
        int x=que[tail++];
        for(int i=h[x];i;i=g[i].next){
            if(g[i].cap&&d[x]+g[i].cost<d[g[i].to]){
                d[g[i].to]=d[x]+g[i].cost;
                last[g[i].to]=i;
                if(!used[g[i].to]){
                    if(d[g[i].to]<d[que[tail]])que[--tail]=g[i].to;
                    else que[++head]=g[i].to;
                    used[g[i].to]=1;
                }
            }
        }
        used[x]=0;
    }
    return d[t]!=INF;
}
void mcf(int t){
    int minn=INF;
    for(int i=last[t];i;i=last[g[i^1].to])minn=min(minn,g[i].cap);
    ans1+=minn;
    for(int i=last[t];i;i=last[g[i^1].to]){
        ans2+=g[i].cost*minn;
        g[i].cap-=minn;
        g[i^1].cap+=minn;
    }
}
int main()
{
    int n,m,s,t;
    n=read();m=read();s=read();t=read();
    for(int i=1;i<=m;i++){
        int x,y,w,f;
        x=read();y=read();w=read();f=read();
        add(x,y,w,f);
    }
    while(spfa(s,t))mcf(t);
    printf("%d %d",ans1,ans2);
    return 0;
}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

洛谷P3381——费用流模板题

标签:set   sed   bool   ext   ret   tchar   tail   min   cstring   

原文地址:http://www.cnblogs.com/Yzyet/p/6798753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!