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

dinic模板

时间:2017-08-10 10:17:25      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:main   string   stream   ini   head   turn   logs   color   cst   

#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x7fffffff
#define ll long long 
using namespace std;
ll head[205],q[205],T,h[205];
ll cnt=1,ans,n,m;
struct data{ll to,next,v;}e[501];
void ins(ll u,ll v,ll w)
{e[++cnt].to=v;e[cnt].next=head[u];e[cnt].v=w;head[u]=cnt;}
void insert(ll u,ll v,ll w)
{ins(u,v,w);ins(v,u,0);}
bool bfs()
{
     ll t=0,w=1,i,now;
     memset(h,-1,sizeof(h));
     q[0]=0;h[0]=0;
     while(t<w)
     {
               now=q[t];t++;i=head[now];
               while(i)
               {
                       if(e[i].v&&h[e[i].to]==-1)
                       {
                                                 h[e[i].to]=h[now]+1;
                                                 q[w++]=e[i].to;
                                                 }
                       i=e[i].next;
                       }
               }                
    return h[T]==-1? 0:1;
 }
ll dfs(ll x,ll f)
{
    if(x==T)return f;
    ll w,used=0,i;
    i=head[x];
    while(i)
    {
            if(e[i].v&&h[e[i].to]==h[x]+1)
            {
                                          w=f-used;
                                          w=dfs(e[i].to,min(w,e[i].v));
                                          e[i].v-=w;
                                          e[i^1].v+=w;
                                          used+=w;
                                          if(used==f)return f;
                                          }
            i=e[i].next;
            }
    if(!used)h[x]=-1;
    return used;
}
void dinic(){while(bfs())ans+=dfs(0,inf);}
void ini()
{
     scanf("%lld%lld",&m,&n);
     T=n-1; 
     for(ll i=1;i<=m;i++)
     {
         ll u,v,c;
         scanf("%lld %lld %lld",&u,&v,&c);
         u--,v--;
         insert(u,v,c);
    } 
}
int main()
{
    ini();
    dinic();
    printf("%lld",ans);
    return 0;
    }

草地那道题我把数据范围从1000改到200就从2016ms到了8ms?

技术分享

气死

dinic模板

标签:main   string   stream   ini   head   turn   logs   color   cst   

原文地址:http://www.cnblogs.com/dancer16/p/7337250.html

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