06 2018 档案

摘要:题意:给一个图。规定至多转弯的次数,起点和终点。问在转弯的次数内能否到达终点。 注意!给的n*m的map,n是列,m是行。同一个点可能经过多次。由于只统计拐弯次数,会出现走的步数少但拐弯多的情况。 1 #include <cstdio> 2 #include <cstring> 3 #include 阅读全文
posted @ 2018-06-27 21:44 demianzhang 阅读(190) 评论(0) 推荐(0)
摘要:题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点。选择每个点有各自的利益或损失。求最大化的利益,以及此时选择人数的最小值。 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益。每个负点到t建边,容量为损失的绝对值。其他关系边容量正向无穷,反向0。正数点总和减去最小割即为最大权闭 阅读全文
posted @ 2018-06-27 16:52 demianzhang 阅读(391) 评论(0) 推荐(0)
摘要:题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5);就算你用其他求最大流的算法,算法总复杂度也要O(n4)。所以用网络流算法求解最小割集复杂度不会低于O(n4)。所以就要用St 阅读全文
posted @ 2018-06-26 20:28 demianzhang 阅读(475) 评论(0) 推荐(0)
摘要:题意:给出一个无向图,判断是否任意两点间都存在至少3条互相独立的路,独立指公共顶点只有起点和终点。算法:枚举每个点,删去后用Tarjan判断图中是否存在割点,如果存在则该图不满足三连通性。Tarjan中保存搜索树,多子树的根节点为割点;dfs顺序为节点编号,dp得到每个子树通过回边能回到的最小编号,若某点的子树们能回到的点大于等于自己,则该点为割点。转自:yogykwan 1 #include... 阅读全文
posted @ 2018-06-24 23:18 demianzhang 阅读(388) 评论(0) 推荐(0)
摘要:转自:byvoid:有向图强连通分量的Tarjan算法 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的所有节点是否为一个强连通分量。 有两个概念:1.时间戳,2.追溯值 时间戳是dfs遍历节 阅读全文
posted @ 2018-06-24 19:02 demianzhang 阅读(499) 评论(0) 推荐(0)
摘要:题意:现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条有向水渠,给出这n条水渠所连接的点和所能流过的最大流量,求从源点到汇点能流过的最大流量 Dinic 建图的另一种方法,上面有两种邻接表的方法,一种是单纯用数组模拟,可以运用异或操作反向边;另一个是vector模拟,反向边做特别记录 阅读全文
posted @ 2018-06-23 23:55 demianzhang 阅读(408) 评论(0) 推荐(0)
摘要:题意: 给定n个点的有向完全图,希望通过其中n-1条边将n个点串起来(2<=n<=1000) 欧拉路径:经过所有边且只经过一次 哈密顿路径:经过所有点且只经过一次 思路: 本题条件特殊,有向完全图。构造法求解,将点插在head之前,tail之后,或head和tail之间(实际插在head后或tail 阅读全文
posted @ 2018-06-22 21:44 demianzhang 阅读(634) 评论(0) 推荐(0)
摘要:类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解【是否有负环】或求差的极值【最短/长路径】。例子:b−a<=k1,c−b<=k2,c−a<=k3。将a,b,c转换为节点;k1,k2,k3转换为边权;减数指向被减数,形成一个有向图: 由题可得(b−a) + 阅读全文
posted @ 2018-06-20 22:21 demianzhang 阅读(270) 评论(0) 推荐(0)
摘要:POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c — sum[a]<=sum[a+b+1]−c−1 — (a+b+1,a) −c−1 式子2:sum[a+b+1]−sum[a]<c — sum[a+b+1]<=sum[a]+c−1 — (a 阅读全文
posted @ 2018-06-20 19:17 demianzhang 阅读(268) 评论(0) 推荐(0)
摘要:差分约束系统,求最小值,跑最长路。 转自:https://www.cnblogs.com/ehanla/p/9134012.html 题解:设sum[x]为前x个咕咕中至少需要赶走的咕咕数,则sum[b]−sum[a−1]>=c表示[a,b]区间至少赶走c只。题目中选择的是最少,我们需要跑最长路,因 阅读全文
posted @ 2018-06-19 22:17 demianzhang 阅读(524) 评论(0) 推荐(0)
摘要:求连通域个数,简单题 阅读全文
posted @ 2018-06-19 17:40 demianzhang 阅读(333) 评论(0) 推荐(0)
摘要:给定数字n,m(1<=n,m<=500000) 将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内。 求将n变为m的最少花费 思路:建图 将每个数字视为图中的点,数字之间的转换视为图中的边,有向图。 500000个点,(i,i*2)权值为2,(i,i-3)权 阅读全文
posted @ 2018-06-18 22:12 demianzhang 阅读(356) 评论(0) 推荐(0)
摘要:CDOJ 1966 Kruskal 解法 时间复杂度O(mlogm) m为边数,这里主要是边排序占时间,后面并查集还好 prim模板:主要用于稠密图,尤其是完全图的最小生成树 时间复杂度为O(n^2),如果用最小堆优化,为O(mlogn) [实际为O((m+n)logn),假设m边数>=n顶点数,从 阅读全文
posted @ 2018-06-17 22:27 demianzhang 阅读(372) 评论(0) 推荐(0)
摘要:以s=0,t=n+m+1分别为超级源点和超级汇点。网络流中的流量以0为开始,题目要求从1到20,我们先把每个点都减去1,即ai - m,bi - n。然后源点s与n个顶点连容量为ai的路,汇点t与m个顶点连容量为bi的路,n个顶点再与m个顶点连接19的容量。最后再跑下Dinic,如果最后汇聚到t的流 阅读全文
posted @ 2018-06-17 21:21 demianzhang 阅读(262) 评论(0) 推荐(0)
摘要:POJ1679 首先求出最小生成树,记录权值之和为MinST。然后枚举添加边(u,v),加上后必形成一个环,找到环上非(u,v)边的权值最大的边,把它删除,计算当前生成树的权值之和,取所有枚举加边后生成树权值之和的最小值 思路: 最小生成树唯一性判断,求次小生成树的val再与最小生成树比较。1.先用 阅读全文
posted @ 2018-06-15 20:43 demianzhang 阅读(214) 评论(0) 推荐(0)
摘要:伊卡洛斯很爱吃西瓜。一次,他来到一个西瓜摊旁,发现水果摊有N个西瓜,西瓜有红色、黄色、绿色、蓝色……等等数不清的颜色。 伊卡洛斯很想知道知道一些信息,便于老板交谈了起来。 当老板的话的第一个字符为”A”时,老板会告诉伊卡洛斯一些信息,格式如下: A x y 1 这句话表示第x个西瓜和第y个西瓜是同一 阅读全文
posted @ 2018-06-14 20:20 demianzhang 阅读(457) 评论(0) 推荐(0)