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. 【计数DP】种树

    种树 题目描述 事实上,小X邀请两位奆老来的目的远不止是玩斗地主,主要是为了抓来苦力,替他的后花园种树……小X的后花园是环形的,他想在花园周围均匀地种上n棵树,但是奆老花园的土壤当然非同寻常,每个位置 ...

  2. PB笔记之数据窗口添加虚拟列的方法

    1.选择计算域控件: 2.输入公式 3.添加一个输入框作为列名,注意Name必须改为后缀为_t(PB固定识别_t)才可以绑定输入框和计算域作为虚拟列,虚拟列在最后一列时,有可能不能改变宽度,需往前挪才 ...

  3. Emit用法

    [转自]https://blog.csdn.net/xiaouncle/article/details/52890037 本人是从0开始学习Emit的,在学习过程中比较困扰我的就是有很多指令不理解.不 ...

  4. C#使用消息队列(MSMQ)

    最近项目用到消息队列,找资料学习了下.把学习的结果 分享出来 首先说一下,消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能 ...

  5. Redis—简介

    1.Redis是什么? 是一个速度非常快的非关系型数据库,即NoSql数据库(non-relational database) 可以将存储在内存的Key-Value数据持久化到硬盘,可以使用复制特性来 ...

  6. SSH和SSM对比异同点、各自优势

    1SSH和SSM定义SSH 通常指的是 Struts2 做控制器(Action),Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做控制器(co ...

  7. python实现ssh及sftp功能

    1.在Linux上我们通过scp命令实现主机间的文件传送,通过ssh实现远程登录 ,比如 我们经常使用的xshell远程登录工具,就是基础ssh协议实现window主机远程登录Linux主机 下面简单 ...

  8. layui切换

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 团队高效率协作开发的秘密武器-APIDOC

    团队高效率协作开发的秘密武器 1.前言 在团队协作开发中,不知道各位有没有遇到这样的问题: l 新人接手了项目代码,因没有项目文档,只能靠追踪路由,寻读代码分析业务逻辑 l 前端同学写好了页面,苦等后 ...

  10. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...