flow

P3440 [POI2006]SZK-Schools

╄→гoц情女王★ 提交于 2020-01-28 23:00:52
题目链接 题解: 暴力连边,然后直接最小费用最大流就OK了 AC代码: # pragma GCC optimize(2) # include <bits/stdc++.h> # include <ext/rope> using namespace std ; using namespace __gnu_cxx ; # define LL long long const int MAXN = 2000 + 50 ; const int MAXM = 2e6 + 50 ; const int MOD = 1e9 + 7 ; const int INF = 0x3f3f3f3f ; int n , m , s , t , tot = 1 , maxflow , res , head [ MAXN ] , nxt [ MAXM ] , w [ MAXM ] , to [ MAXM ] , co [ MAXM ] ; int dis [ MAXN ] , vis [ MAXN ] , pre [ MAXN ] , flow [ MAXN ] ; inline void ade ( int u , int v , int ww , int cost ) { to [ ++ tot ] = v ; w [ tot ] = ww ; co [ tot ] = cost ; nxt [ tot ]

kuangbin专题专题十一 网络流 POJ 3436 ACM Computer Factory

那年仲夏 提交于 2020-01-28 20:28:35
题目链接: https://vjudge.net/problem/POJ-3436 Sample input 1 3 4 15 0 0 0 0 1 0 10 0 0 0 0 1 1 30 0 1 2 1 1 1 3 0 2 1 1 1 1 题目:P —— 一台电脑由p个零件组成    N —— 工厂有n台加工组装电脑的机器   Q ——— i-th机器每单位时间能工作的数量  当每个未成品需要放入某个机器进一步加工的时候,它需要满足这台机器能正常工作的前提,即它必须满足某些零件已经组装好了。样例1: 前p个数字表示,进入i-th台机器,必须满足这些条件(0表示这个零件不能被安装 1表示这个零件必须被安装 2表示这个零件有无被安装无影响) 后p个数字表示,某个未成品被i-th台机器加工完成后,满足了这些条件(0表示这个零件没被安装 1表示这个零件被安装了)问:怎么安排机器工作方案,能使得工作效率最大化,安排情况有很多,输出一种即可。思路:比较清楚,一个超级源点,一个超级汇点,一台机器需要拆成入点和出点,一台机器的入点和出点流量为该机器单位时间的工作量,其他点与点之间的流量就是INF了。重点就是哪些边能建立起来比较麻烦,图建好了,跑一个Dinic就OK了。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm>

[CF Edu 80] Red-Blue Graph

末鹿安然 提交于 2020-01-27 07:42:08
题目: [CF Edu 80] Red-Blue Graph 链接: https://codeforces.com/contest/1288/problem/F 分析: 原来在费用流里必选一条边还能用-inf来控制,原谅我孤陋寡闻了 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 410; const int MAXM = MAXN * 10; const int inf = 1e6; const LL INF = 1e18; namespace NWF{ struct Edge { int to, nxt;LL f, c; } e[MAXM << 1]; int S, T, tot; int ecnt, head[MAXN], cur[MAXN];LL dis[MAXN]; bool exist[MAXN]; queue<int> q; void init(int _S, int _T, int _tot){ ecnt = 1; S = _S; T = _T; tot = _tot; memset(head, 0, (tot + 1) * sizeof(int)); } void addEdge(int u, int v, LL f, LL c) { e[+

[CF331E] Biologist

我的未来我决定 提交于 2020-01-26 22:19:01
题目大意 有一个长度为 \(n\) 的 01 串,将第 \(i\) 个位置变为另外一个数字的代价是 \(v_i\) 。 有 \(m\) 个要求 每个要求的形式是 首先确定若干位置都要是 \(0\) 或者 \(1\) 然后给定这 \(k\) 个位置,如果些位置上都满足要求 那么就可以得到 \(W_k\) ​ 元 某些要求如果失败了还要倒着给 \(g\) 元。问最终能够得到的最大利润 输入格式: 第一行是 \(n,m,g\) 第二行是初始的 01 串 第三行是 \(V_i\) ​ 接下来 \(m\) 行 第一个数字表示这个集合都要是 0 还是 1 第二个数字 \(W_i\) ​ 表示利润,接下来 \(k_i\) ​ 表示这个集合中有 \(k\) 个位置 接下来是这 \(k\) 个位置, 最后还有一个 0/1 ,如果是 1 ,表示如果失败了还要倒着给 \(g\) 元。 解析 一道非常满足最小割模型的题目。对于每个点,如果最开始是0,我们从原点向它连边,边权为 \(v_i\) ,表示这个点不为0的代价。同理,对于一个为1的点,将它向汇点连边,边权为 \(v_i\) ,表示该点不为1的代价。 对于每一组要求,如果是要全为0,就从原点向这个要求对应的点连边,边权为这个要求不满足的代价(包括 \(w_i\) 以及是否有额外代价)。然后从要求对应的边向要求中的点连边,边权为无穷大。如果要求全为1

有上下界的网络流问题

不羁岁月 提交于 2020-01-26 20:53:16
有上下界的网络流问题分为无源汇和有源汇两种。 根据周源的《 一种简易的方法求解流量有上下界的网络中网络流问题》 无源汇上下界网络流 的做法是: 设边u->v的下界是B(u,v),上界是C(u,v)。 设M(i)为对于i结点的流入i的下界总和-流出i的下界总和。 增设源点s和汇点t。 如果M(i)>=0 连边s->i,容量为M(i)。 如果M(i)<0 连边i->t,容量为-M(i)。 对于图中的原来的边u-v,连边u->v,容量为C(u,v)-B(u,v)。 然后求最大流。如果对于源点出发的所有边都满流,则说明存在一个可行流满足条件。 有源汇有上下界网络流 的具体做法是: 1.求可行流 从汇点到源点连一条边,容量为INF,其他与无源汇有上下界网络流的建图方法相同。然后以超级源点和超级汇点为网络流的源和汇求一次最大流。 判断起始于超级源点的边是否全部满流即可。 2.求最大流 从汇点到源点连一条边,容量为INF,其他与无源汇有上下界网络流的建图方法相同。然后以超级源点和超级汇点为网络流的源和汇求一次最大流。 判断起始于超级源点的边是否全部满流,若满流,说明存在可行流。 然后去掉汇点到源点连的边,在原来的基础上以原图中的源点和汇点为网络流的源和汇再求一次最大流即可。 ZOJ 2314 Reactor Cooling 无源汇有上下界求最大流 题目链接: http://acm.zju.edu

GIT工作流程

情到浓时终转凉″ 提交于 2020-01-25 10:32:06
Git工作流程 Git 能从众多版本控制系统中脱颖而出,其’必杀技特性’是其分支模型,Git分支模型使版本的分支合并起来非常的方便。但是滥用其分支特性也会产生副作用,很可能会出现一个纷乱丛生、结构复杂的分支系统。于是 Vincent Driessen 提出了一个分支管理模型Git-Flow。它可以使版本库的更新迭代结构清晰,各分支各司其职~ Git-Flow Master – 线上分支(发布分支,长期存在) Develop – 开发分支(本地分支,长期存在) Feature – 新功能分支 Release – 预热分支(预发布分支) Hotfix – 修复分支(Bug分支) 需求是开发的起点,当我们进行功能开发时,先有需求再有功能分支(feature branch)。功能分支是从Develop分支上面分出来的,完成新功能后,该分支上的功能就被合并到Develop分支上,然后删除 Feature 分支。 当develop分支积累足够的功能(预定的发布日期临近),就可以建立一个预发布分支(release branch)。预发布分支是从Develop分支上面分出来的,预发布结束以后,再合并到 Develop 和 Master 分支,然后删除 Release 分支。 当功能正常运行后,如果遇到紧急问题需要修复,这个时候需要创建一个独立的修复分支(hotfix branch)

OpenFlow Switch

隐身守侯 提交于 2020-01-25 08:13:22
The picture of OpenFlow Switch openflow 架构分为2层,一个是控制器层,一个是switch 层。中间是由openflow protocal进行连接的,负责传输指令与数据。switch分为3大块,第一是openflow channe,他是负责向控制器传输数据集和指令。第二是group table,第三是pipeline, 其中pipeline是flowtable的集合。 openflow 流程 一个OpenFlow Switch内包含了一个或多个Flow Tables,以及一个Group Table,而每个Flow Table均包括下面几项 Flow Entry:1)Match Fields,2)Priority,3)Counters,4)Instructions Set。 当数据包进入到OpenFlow Switch后,首先会从Pipeline的第一个Flow Table开始根据每条Flow Entry的Match Fields项依据其Priority进行match,如果match成功,则会执行Instructions Set里的Actions,这些Actions或者是forward到某个port,或者是drop掉数据包,或者是跳转到指定的后续Flow Table继续match,或者是跳转到Group Table里处理;假若在(或者说后续的

[洛谷P4249] WC2007 剪刀石头布

我怕爱的太早我们不能终老 提交于 2020-01-23 23:31:05
问题描述 在一些一对一游戏的比赛(如下棋、乒乓球和羽毛球的单打)中,我们经常会遇到 A 胜过 B,B 胜过 C 而 C 又胜过 A 的有趣情况,不妨形象的称之为剪刀石头布情况。有的时候,无聊的人们会津津乐道于统计有多少这样的剪刀石头布情况发生,即有多少对无序三元组 (A,B,C) ,满足其中的一个人在比赛中赢了另一个人,另一个人赢了第三个人而第三个人又胜过了第一个人。注意这里无序的意思是说三元组中元素的顺序并不重要,将 (A, B, C)、(A, C, B)、(B, A, C)、(B, C, A)、(C, A, B) 和 (C, B, A) 视为相同的情况。 有 N 个人参加一场这样的游戏的比赛,赛程规定任意两个人之间都要进行一场比赛:这样总共有 $\frac{N*(N-1)}{2} $ 场比赛。比赛已经进行了一部分,我们想知道在极端情况下,比赛结束后最多会发生多少剪刀石头布情况。即给出已经发生的比赛结果,而你可以任意安排剩下的比赛的结果,以得到尽量多的剪刀石头布情况。 输入格式 输入文件的第 1 行是一个整数 N,表示参加比赛的人数。 之后是一个 N 行 N 列的数字矩阵:一共 N 行,每行 N 列,数字间用空格隔开。 在第 (i+1) 行的第 j 列的数字如果是 1,则表示 i 在已经发生的比赛中赢了 j;该数字若是 0,则表示在已经发生的比赛中 i 败于 j;该数字是 2

The 2019 ICPC Asia-East Continent Final(M、E、H)

谁都会走 提交于 2020-01-23 16:18:17
The 2019 ICPC Asia-East Continent Final 大部分学习于: The 2019 ICPC Asia-East Continent Final(部分题解) 欠了一屁股的题目要补,倒序开始做吧! 大概有10套题目 & 7套网络赛题目…(署训就…) A 在瓜大签了个A,之后坐着数了4个小时气球。 补题 M 做的时候为什么没有想到暴力…? 从1到n获取一些基底,满足基底不是任何其他数字的幂次;以这些基底和其若干次幂组成一串元素,枚举这一串数字的选取情况,不断更新最大值即可。 容易知道一串元素至多有20个,所以可以用二进制数表示这20个元素的选取情况。在每一种选取情况中嵌套循环来搜索那些需要减去 b [ i ] b[i] b [ i ] 的位置并打上标记,读题有一个地方不是很对:只要有一对 ( i , j ) (i, j) ( i , j ) 满足 i k = j i ^ k = j i k = j 就要减去一次 b [ j ] b[j] b [ j ] ,最开始的理解是存在上述元素对 ( i , j ) (i, j) ( i , j ) 就仅减去一次 b [ j ] b[j] b [ j ] ,这也是后来补题的时候卡了很久的地方。 AC代码 E 给出一个有向简单图,顶点1到顶点n之间有若干条长度相同、互不相交的路径;每条路径具有容量

软件定义网络基础---SDN控制平面

╄→尐↘猪︶ㄣ 提交于 2020-01-23 16:02:11
一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑。  对底层网络交换设备进行集中管理,状态监测、转发决策以及处理和调 度数据平面的流量;  通过北向接口向上层应用开放多个层次的可编程能力。 (一)典型的SDN控制器体系架构 SDN控制平面分为6层 南向接口层主要对各种南向接口协议的支持,如Open Flow,Netconf,OVSDB等,控制器通过接口层的通道实现对底层网络的管理 抽象逻辑层主要是将服务抽象出来,实现各种通信协议的适配,为各模块和应用提供一致的服务 基础网络层在任何控制器中都是必不可少的,这里的模块包括了控制器内部的实现逻辑,比如:拓扑管理、链路计算等,也包括一些底层的网络实现逻辑,比如BGP Vxlan的实现等 内置应用层提供了基础的功能包,如L2、L3网络,Overlay APP,服务链APP等 北向接口层中,控制器实现了Restful API的接口或者嵌入式的API提供给上层应用调用 配置管理层提供了控制器服务管理,集群管理和图形化界面,如ODL控制器提供了模块的启用、删除等功能,Floodlight等控制器提供了一个简单易用的UI界面,可以在web界面中调用控制器的北向API对控制器进行配置 二:控制器关键技术 主要是包括南向网络控制和北向业务支撑 (一)南向网络技术 通过南向接口协议进行链路发现、拓扑管理、策略制定、表项下发等: