
图论
文章平均质量分 92
xyc1719
努力会说谎,但努力不会是白费
展开
-
【下海捕鱼】割顶与桥的求解
Description给出一个n个点(编号1..n),m条边的无向图,求图的割顶和桥。Input Data包含多组测试数据,每组数据格式如下: 第一行输入n,m(n,m <= 100000; 下面m行每行输入u,v表示u和v之间有边。 最后一行是n=m=0,表示数据结束。Output Data对于每组数据,输出: 第一行输出割顶的个数和桥的条数。 若割顶...原创 2018-04-24 14:35:43 · 297 阅读 · 0 评论 -
次短路学习笔记
原以为次短路算法会很麻烦,结果是随便乱搞(雾)。次短路算法可以拓宽图论时我们的思维和乱搞能力(雾),看一道引题。【引题】用一张图和一些边,求一列点之间的最短通路,要求初始点和终点必须都是集合中的点。如果不能从原图中有效地抽离出那些点的话,直接用floyd算法,复杂度就是O(n3)。但是如果建立一个超级源,从源点出发,向每一个点连一条边长为0的边,再求到每点之间的次短路就可以很好地解决这个问题...原创 2018-10-31 18:43:53 · 212 阅读 · 0 评论 -
道路网(map)
【一句话题意】C 国的道路网络由m条双向线路组成,有n个城市在道路网络上。每条线路途经一些城市(可能会经过多次同一城市),最多有li个城市,位于线路上的两个城市a,b 通过i 号线路互相抵达的费用为w[i][a] + w[i][b]。现在有T个询问,询问两城市互相到达的最小费用。n<=1e5;m<=300;li,T,w[i][j]<=2000。【分析】此题暴力spfa可以骗到...原创 2018-10-24 19:54:35 · 517 阅读 · 1 评论 -
Walk
在比特镇一共有n 个街区,编号依次为1 到n,它们之间通过若干条单向道路连接。比特镇的交通系统极具特色,除了m 条单向道路之外,每个街区还有一个编码vali,不同街区可能拥有相同的编码。如果vali and valj = valj,即vali 在二进制下与valj 做与运算等于valj,那么也会存在一条额外的从i 出发到j 的单向道路。Byteasar 现在位于1 号街区,他想知道通过这些...原创 2018-10-27 15:37:37 · 211 阅读 · 1 评论 -
树上摩托 sherco.cpp
【一句话题意】给定一棵树,问剪成几棵节点数相同的子树的方案数。节点数n<=1e6【分析】易证当每棵子树的节点数相同时,划分方案是唯一的。问题在于确定点数并进行判定。本来是一道愉悦身心的好题,结果n是1e6。考场上是先根号n筛n的因数,再用dfs判定,结果。。。顺利超时。然后,正解是把dfs转化为O(n)的线性扫描,原因是常数小。。。。。再次投诉出题人,竟然卡dfs。【code】#i...原创 2018-10-27 16:39:27 · 243 阅读 · 0 评论 -
大联欢 party.cpp
【一句话】有n 个点m条无向边,问是否能使n个点划分到两个集合中使得每个集合都是一个完全图。如果不可以输出-1,如果可以则输出两个集合最小的边数总和。【分析】可以说是图论的经典一题。正方向建图似乎很难考虑,那我们考虑建反图(有边的没边,没边的有边)。反图中每条边表示的意义就是,两个点不能在同一个集合(如果在同一个集合,则集合一定不是完全图)。再者进行二分图染色,如果我不存在矛盾的情况,就一定会...原创 2018-11-02 15:25:18 · 148 阅读 · 0 评论 -
作画鬼才
【题意】给出一幅原图,接下来有k幅图,每一幅都是在原图上选取一个矩形将他们改为同一个颜色,问以那幅画为标准的差异值最小【分析】大致思路是“在一个二维平面有大量修改,求修改后的统计结果“。既然有大量修改,又可以离线回答统计结果,何不用差分呢(抱歉,这里是二维的)。差分表示到(i,j)颜色为k的修改有几个,nm跑一遍就可得到(i,j)有几个点修改为颜色k,加上原图中未被修改的部分就是(i,j)颜色为...原创 2018-11-04 16:06:41 · 195 阅读 · 0 评论 -
键盘 keyboard.cpp
【一句话题意】有多种操作1、删除一个字符,代价为12、加入一个字符,代价为13、复制字符串为原来的k倍,代价为2+2*k3、删除所有字符,代价为3现在有初始长度为x,求到长度n最小代价。【分析】题目稍作简化,请无视。显然删除所有字符只有在所有操作之前(反证法即可)。稍作思考即可发现,dp值的大小,存在极强的后效性。所以,改成最短路求dist[x],spfa玄学复杂度再加常数优化...原创 2018-11-07 13:43:26 · 402 阅读 · 0 评论 -
约束 limit.cpp
【一句话题意】现有n个点,n条有向边。要求将n个点分入两个集合A,B,使得对于集合A中的每一个点x,存在一个集合B中的点y,从y到x有一条有向边。问集合A最多能包含几个点。n<=1e5【分析】首先需要确定的是,这是一道包着“集合”外壳的图论题。乍一看,是否与求最大二分图匹配有几分神似?鉴于一句OI名言**“题目是死的,人是活的,出题人是懒的。”**机房一位大佬尝试着使用二分图算法,结果...原创 2018-11-07 14:20:30 · 156 阅读 · 0 评论 -
noi2008 假面舞会
【题目描述】有n个点和m条关系。只有集合i的点才会和集合i+1的点连边,特别的集合k的点可以和集合1连边(构成一个蛇咬尾的环形)。给定的关系和点之后,问k的最小值最大值是多少。(约定k≥3)【分析】只有环会对集合产生约束性,(链可以困成一卷一卷的)。所有环的最小公因数(最小周期,小环转1圈,大环转n圈)就是k的最大值。最小值就是k≥3的最小约数。如果最小公因数(周期)小于3,那么信息有误,输出“...原创 2018-12-09 21:29:36 · 316 阅读 · 0 评论 -
机智的csy
【简要题面】现在你在数轴上的坐标为x,你需要到坐标y。现在有两种操作:1.先前或向后一步2.坐标*2现在求最小的操作数。数轴长度<=1e5。【分析】数轴不长所以可以随便乱搞,dp,bfs或者像我乱spfa都可以。【code】#include<cstdio>#include<cstring>#include<iostream>#incl...原创 2019-02-15 14:24:15 · 216 阅读 · 0 评论 -
植物学家
【简要题意】一棵带点权的有根树,其中树根可以转换。每次询问当前根下x节点的子树权值和。节点数、操作数<=1e5【分析】对于任意一个点做根,相当于是在整棵树总的权值中减去根所在的那颗"子树"。可以先固定根,求dfs序确定root所在的位置,再通过lca确定哪棵子树。【code】#include<cstdio>#include<cstring>#includ...原创 2019-02-16 15:45:53 · 190 阅读 · 0 评论 -
家园重建
【简要题意】有n个点和m条边。选出其中的某些边构成一个新的图(不一定联通),要求新图中每个连通块中至多有一个环。求新图的边权最大和。【分析】贪心,依旧是一道kruskal类似的题,不同只是要记录当前集合中是否有环。【code】#include<cstdio>#include<cstring>#include<iostream>#include<...原创 2019-02-17 13:54:23 · 500 阅读 · 0 评论 -
皮卡丘逃亡
【简要题意】跨越空地代价为1,跨越障碍代价为5,求从(x1,y1)到(x2,y2)的最小代价。网格图的长宽均小于500.【分析】spfa水过。。。。数据范围非常小所以用Θ(n∗m)\Theta(n*m)Θ(n∗m)卡掉也无所谓。【code】#include<queue>#include<cstdio>#include<cstring>#includ...原创 2019-02-18 13:53:21 · 178 阅读 · 0 评论 -
卡内存
【简要题意】给一个长度为n序列。进行m次如下操作:1.add x k:给a[x]加上k。2.ask x y:查询区间[x,y]内所有数的和。3.goto t:回到第t次操作之后的状态。n,m<=1e5。特别注意:空间限制为8MB【分析】由于题目背景中出现了可持久化线段树,又有回退到历史版本的操作,所以很多人试图如题目所说的那样卡可持久化的内存。事实证明是卡不过的。这里有一种神奇...原创 2019-02-24 14:55:42 · 10519 阅读 · 0 评论 -
相交(Access)
【一句话题意】有一棵n 个节点,n-1 条边的树。树上有m 条路径,定义两条路径相交仅当这两条路径经过至少一个相同的点。求这m 条路径中选择两条相交的路径的方案数。【分析】两条树上的链相交的充要条件为:一条链上深度最小的节点(lca)被另一条链所包含。通过欧拉序预处理+树状数组,我们可以通过O(logN)的时间求出一个点到根的路径上的所有点,共有多少个lca。因此我们可以方便的求出一条链上所有点...原创 2018-10-26 07:44:16 · 263 阅读 · 0 评论 -
规避(Evade)
【一句话题意】给你一个图源点s和汇点t,先求得最短路,再在最短路上,求在s和t同时出发,不相遇不重复的路径方案数。对1e9+7取模。【分析】考虑容斥原理,不考虑相遇,则方案数为{最短路条数}2。再排除在边上相遇的情况{f[u]*g[v]}2和在点上相遇的情况{f[u]*g[u]}2。f、g数组为从s(或t)走最短路出发到点i的方案数。细节上处理的关键在于从整张图中抽离出最短路再进行dp。【...原创 2018-10-25 20:43:41 · 208 阅读 · 0 评论 -
列队(line)
【一句话题意】给定一个一维坐标轴和n个点。再给定m个两点之间的关系。如果关系有矛盾,则输出impossible;如果没有矛盾则输出最左点和最右点的坐标差。【分析】这道题可以用带权并查集做,道理与之前的方块消除相同,这里不再赘述。另一方面这道题也可以用差分约束系统的弱化版解决。关于差分约束系统,本质是把几个不等式组的最值求解转化为图论问题。...原创 2018-10-25 20:18:00 · 187 阅读 · 0 评论 -
【下海捕鱼】求无向图的点双连通分量(模板)
Description给出一个n个点(编号1..n),m条边的无向图,求图的点双连通分量(Biconnected Component)。Input Data包含多组测试数据,每组数据格式如下: 第一行输入n,m(n<=1000, m<=10000) 下面m行每行输入u,v表示u和v之间有边。 每组数据间有一个空行。 最后一行是n=m=0,表示数据结束。Outpu...原创 2018-04-25 08:51:35 · 599 阅读 · 2 评论 -
【LCA倍增】修路 build
【问题描述】有 n 个兵营里驻扎着士兵,由于兵营间没有路,士兵不能相互增援。现在工程队每天 可以修建一条连接两个兵营的双向道路。现在指挥官询问,对于一个兵营 u,最早什么时候 可以增援兵营 v,即两个兵营之间有连通的路径。【输入数据】第一行两个整数 N,M,表示兵营的数量和道路的数量,兵营从 1-N 编号。 接下来 m 行,每行两个整数 x,y,表示会按顺序修建兵营 x 和兵...原创 2018-05-14 09:16:26 · 235 阅读 · 0 评论 -
【二分图染色】[UVA11080] Place the Guards 城市警卫
Description(粗略版)一些城市,之间有道路相连,现在要安放警卫,警卫能看守到当前点周围的边,一条边只能有一个警卫看守,问是否有方案,如果有最少放几个警卫PDF(English)Input Sample2 4 2 0 1 2 3 5 5 0 1 1 2 2 3 0 4 3 4Output Sample2 -1———————————————...原创 2018-04-29 21:12:58 · 251 阅读 · 0 评论 -
Scc(强连通分量)的非递归式写法
强连通分量的递归写法不解释,如有问题请右转传送门: 强连通分量–Tarjan个人理解+详解优势:防止tarjan求强连通分量时爆栈从递归式出发,程序是从原来的递归程序运行一半,递归运行下一层。直至下一层的递归调用完毕后,再回溯至源程序。而手工栈需要模拟系统栈的调用方式,先定义一个类似于栈的数组或数据结构,再通过while循环调用进行模拟运算。但漏洞是很明显的,在系统栈的调...原创 2018-05-27 17:17:56 · 1511 阅读 · 0 评论 -
【NOIP2015】Day1 信息传递
题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 T_i 的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别...原创 2018-07-24 19:02:54 · 313 阅读 · 0 评论 -
最小费用最大流的Edmonds-Karp算法——学习笔记
#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=10000;const int INF=...原创 2018-07-27 16:13:28 · 480 阅读 · 0 评论 -
特教的理性愉悦(ecstasy)
【分析】 来二中的又一道图论题,貌似还是2016noi导刊的一套题。。。从题面开始分析,这明显是一道图论题,而且还是一道LCA的题目,或者是和LCA有关的一道题。但在询问过程中两个点之间未必联通,貌似无法直接用LCA算法求出(u,v)的路径。仔细思考树的一些特性我们会发现,如果在不走回头路的情形下,树中两点之间的路径唯一的。换言之如果(u,v)联通,那么当前两点间的路径和建树完全...原创 2018-08-01 18:20:58 · 812 阅读 · 0 评论 -
二分图匹配——学习匹配
匹配:一张图G中两两没有没有公共点的边的集合(简称边集)二分图:可以把点集分为两个集合X和Y,使得每条边的端点一个属于X另一个属于Y的一张图。原理上我们可以把这种图的结点进行二染色并使得同色结点不相邻。(可以证明:一个图是二分图,当且仅当他不含长度为奇数的圈【奇圈】)二分图最大基数匹配:针对无权图,求出包含边数最多的匹配。即二分图最大基数匹配。上有O(n*m)的匈牙利算法,同时我们也可以将...原创 2018-08-01 18:21:31 · 456 阅读 · 0 评论 -
相交(inter)
【分析】考场上只是简单的打了暴力,连链的特殊情况也没考虑,O(n^2)算法只是可怜兮兮的骗了30分。。。。注意这道题的题解并不难,如果见过类似的模型,只要上次不是抄了题解草草了事就一定能获得满分,但要有类似的思路来想到此题,并不容易。 请仔细观察学习此类算法,以便考场之上可以骗分更多。30分的暴力很直接,每次将树上的一条链打上标记,再在另一条链中遍历是否有点被打上标记。...原创 2018-08-08 20:28:53 · 305 阅读 · 0 评论 -
省常高NOIP模拟 寻梦fantasy
【分析】将目之所及的题面抽象出一定的模型是每个优秀的OIer的基本能力。。。 先提供骗分50的优秀做法,显然的是要想使每个旅者可以回到自己的家乡,整一个交通网一定是由几个环组成的。题目要求在第k天回家,所以每个环的长度一定是k的约数。所以题目就改为,已知n和k求能否将n写成k的几个约数相加的形式(约数可以重复出现)。同时我们还可以发现所有的“约数”环可以拆成一定数量的“质数”环。...原创 2018-08-13 20:35:29 · 548 阅读 · 0 评论 -
没有上司的舞会
问题抽象:给一个DAG,选择尽量多的点使彼此之间不存在祖先-后代关系。5%: 暴力枚举每一个点是否被选中,时间复杂度:O(2^n)20%: 在上一个做法的基础上加上一些剪枝。时间复杂度:O(2^n)。 此算法亦可通过n==200的测试点,且只需要16ms(luogu上)。树的部分分: 容易发现选择全部叶节点即可。时间复杂度:O(n)“每个会员...原创 2018-08-16 19:05:00 · 713 阅读 · 0 评论 -
CodeForces 19E 仙女fairy
CF19E 话说标题“仙女”,好骚啊。。。。这道题的题面核心是图论二分图。满足删除一条边,可以形成一张二分图。求可以删除的边数,并输出是那些边。出题人非常良心的给出了前六十分的暴力分,只要你暴力枚举每条边,再二染色判断是否为二分图即可。在windows环境下,如果忘记手动开栈或者不选择非递归形式,我们就可以获得五十分的好成绩。正确做法是考虑奇环,有奇环就没有二分图,所以我们要破坏掉所...原创 2018-08-17 19:48:59 · 361 阅读 · 0 评论 -
三校联考(二) tree
三句话题意:给你一棵树,每个点有它的初始权值,有三种操作(o): 操作1(o=0):询问以x为根的子树中有多少节点的值大于y。 操作2(o=1):将编号为x的节点的值改成y。 操作3(o=2):添加一个点,其编号为树中原有节点数+1,它的父亲为x,权值为y。给大家看一下正确的题解和正确的算法。Tree解题报告对于30%的数据 不多说了,直接暴力,只是你愿不愿意打的问...原创 2018-08-21 20:34:54 · 186 阅读 · 0 评论 -
APIO2013 道路费用
题目链接 大意是说,调整k条特殊边边的值,并在原图的基础上构建最小生成树。使得经过所有特殊边的值之和最大。感谢dasxxx学长指出题目要素(加上新边,两点之间最多只有一条边),请各位在理解下文解法时特别注意,如果没有这一要求是不能设计如下算法的。在此安利一下HGEEK首席程序员的博客。大致解法: 先缩点。可以知道,对答案有贡献的只有k条新边。先将k条边进行最小生成树,再构建一棵完成的最...原创 2018-09-09 16:19:10 · 312 阅读 · 0 评论 -
Perfect
【一句话题意】给定M个二元组(A_i, B_i),求X_1, …, X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立。【分析】经过不严格的证明我们可以猜想只有不成环或者成偶环时,答案才成立。(一直在0点和1点放一定是最优的)所以只要二分图染色判奇环就可以了,如果是二分图就直接输出染色结果就可以了(反正有spj啦啦啦)。【code】#include...原创 2018-10-28 15:10:20 · 145 阅读 · 0 评论 -
【CF791D】tree 柠檬树
【题目描述】Herobrine能掌控所有,除了他内心的那棵柠檬树。他每看到一件让自己心生羡慕的事,他内心的柠檬树上就会多长出一只多汁美味的柠檬。现在,Herobrine有一棵含有n只柠檬的柠檬树,编号从1到n。这n只柠檬由n-1条树枝相连。 柠檬之间很喜欢用脱落酸进行交流。脱落酸只能通过树枝传递。柠檬们为了尽量频繁的进行交流,就团结一心,调整了树枝的形态,使得任意两只不同的柠檬之间都有且仅有...原创 2019-02-14 15:48:22 · 254 阅读 · 0 评论