78,79行是精髓

61,148,149行是当前弧优化

 #include <cstring>
#include <cstdio>
#include <queue> #define Max 1000090
#define INF 1e9 void read (int &now)
{
now = ;
register char word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} int N, M, S, T; inline int min (int a, int b)
{
return a < b ? a : b;
} class Net_Flow_Type
{ private : int __to[Max * ];
int __next[Max * ]; int __flow[Max * ]; int Edge_Count;
int edge_list[Max]; int deep[Max], Answer; int Queue[Max * ];
int Head, Tail;
int __tech_[Max]; public : Net_Flow_Type ()
{
Edge_Count = ;
Answer = ;
} int Flowing (int now, int flow)
{
if (flow <= || now == T)
return flow;
int pos = , res; for (int &i = __tech_[now]; i; i = __next[i])
{
if (deep[__to[i]] != deep[now] + || __flow[i] <= )
continue;
res = Flowing (__to[i], std :: min (flow, __flow[i]));
if (res > )
{
flow -= res;
pos += res; __flow[i] -= res;
__flow[i ^ ] += res; if (flow <= )
return pos;
}
}
if (pos != flow)
deep[now] = -;
return pos;
} inline void Add_Edge (int from, int to, int flow)
{
Edge_Count ++;
__to[Edge_Count] = to; __next[Edge_Count] = edge_list[from];
edge_list[from] = Edge_Count; Edge_Count ++;
__to[Edge_Count] = from; __next[Edge_Count] = edge_list[to];
edge_list[to] = Edge_Count; __flow[Edge_Count - ] = flow;
__flow[Edge_Count] = ; } void Insert_edges ()
{
for (int i = , from, to, flow; i <= M; i ++)
{
read (from);
read (to);
read (flow); this->Add_Edge (from, to, flow);
}
} bool Bfs (int Start)
{ for (int i = ; i <= N; i ++)
deep[i] = -;
Head = , Tail = ;
Queue[Head] = Start; deep[Start] = ;
register int now; while (Head < Tail)
{
now = Queue[Head];
Head ++; for (int i = edge_list[now]; i; i = __next[i])
if (deep[__to[i]] == - && __flow[i])
{
deep[__to[i]] = deep[now] + ;
if (__to[i] == T)
return true; Queue[Tail ++] = __to[i];
}
} return deep[T] != -;
} int Dinic ()
{
while (Bfs (S))
{
for (int i = ; i <= N; i ++)
__tech_[i] = edge_list[i]; Answer += Flowing (S, INF);
} return Answer;
}
}; Net_Flow_Type Make; int main (int argc, char *argv[])
{
read (N);
read (M);
read (S);
read (T); Make.Insert_edges (); printf ("%d", Make.Dinic ()); return ;
}

永远不会被卡的Dinic的更多相关文章

  1. 科技界、IT届的外号

    牙膏厂 = Intel     挤牙膏来形容缓慢的升级速度 农企(推土机,打桩机,压路机).阿曼达.按摩店  = AMD 两弹元勋.老黄 = 黄仁勋,    核弹.英伟达 = NVIDIA 大法 = ...

  2. 【转载】Mini2440启动配置文件说明

    对于mini2440,虽然root_qtopia这个文件系统的GUI是基于Qtopia的,但其初始化启动过程却是由大部分由busybox完成,Qtopia(qpe)只是在启动的最后阶段被开启. 由于默 ...

  3. 洛谷 P1518 两只塔姆沃斯牛 The Tamworth Two

    P1518 两只塔姆沃斯牛 The Tamworth Two 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在1 ...

  4. GJM :Unity使用EasyAR实现脱卡功能

    首先说下大致思路当卡片离开摄像头时间,ImageTarget-Image的SetActive (false),所以其子物体(model)也就不显示了,因此解决的办法就是在Target (false)时 ...

  5. 网络流dinic实现总结

    太羞耻了,搞了半天居然没发现自己写的不是dinic,直到被一道时限紧的题目卡掉才发现 int dfs(int now,int flow,int sum) { if(now==n) return flo ...

  6. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. PBOC规范下的java卡介绍

    JAVA卡与智能卡 什么是 JAVA 卡呢?JAVA 卡是一种可以运行 JAVA 程序的接触式微处理器智能卡.1996 年 11 月,JAVA 卡 1.0 版本的规范正式发布了.如今 JAVA 卡最新 ...

  8. STM32之SD卡

    目录 一.SD卡概述 1.定义 2.容量等级 3.SD卡框图 4.SD卡与TF卡的区别 二. SD卡内部结构 1. SD卡内部结构简图 2. 存储阵列结构图 3.Buffer 4.“存储阵列Block ...

  9. eclipse EE neon创建dynamic web project时,卡在installing dynamic web module facet,解决办法

    我们在用eclipse EE neon创建dynamic web project时,如果你发现底部状态栏一直卡在installing dynamic web module facet,永远到不了100 ...

随机推荐

  1. GitHub的Fork是什么意思

    GitHub的Fork 是什么意思[转] GitHub Help Simple guide to forks in GitHub and Git GitHub的Fork 是什么意思-N神3-博客园 G ...

  2. git彻底删除或变更子模块

    今天遇到一个很怪的问题,我想把我的一个子模块切换到另一个上游,我按照网上的方法删除子模块然后新建后,这个子模块依旧跟踪着我先前的上游.自己摸索了一下,可能方法比较傻,不过是可行的,希望能给大家一些帮助 ...

  3. PB数据窗口分页

    第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入: ceiling(getrow()/500)  --这里500还可以用全局函数取代,这样可以允许用户任意设置每页多少 ...

  4. 详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本(转)

    原文:https://www.jb51.net/article/156927.htm

  5. Integer源码解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangyangzhizhou/article/details/77196626 概况 Java的In ...

  6. 数据结构与算法---排序算法(Sort Algorithm)

    排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...

  7. linux 下调用wps 注意

    记录笔记以防忘记 wps 是界面程序,linux 必须在界面终端中调用 wps 命令才能打开软件 xshell 连接时启动tomcat ,wps命令 会使用Xshell 的隧道转发,只有在界面下的终端 ...

  8. 【SpringMVC】请求乱码处理

    一.post请求乱码 二.get请求乱码 一.post请求乱码 在web.xml中加入 <filter> <filter-name>CharacterEncodingFilte ...

  9. rabbitmq笔记(一)rabbitmq简介及基础

    一.消息组件 如果从消息组件来讲主要划分位两类: 1.JMS组件:ActiveMQ(慢): 2.AMQP组件(协议):性能是最高的, 而AMQP有两个主要的开源: 1)RabbitMQ:使用最广泛,速 ...

  10. Java中关于String类型的一些思考

    作为初学者在学习Java的时候,变量类型是不可避免会遇到的,在以往我们的印象中字符串String都是作为基本类型而存在的,但是在Java中String类型确是一个实实在在的引用类型,是可以通过new关 ...