随笔分类 - 题解集
摘要:题意简述 每组数据给定一个无序数列,数列中每个数都有一个实时的状态,初始为1。你可以对该数列进行任意次操作,每次操作可以选择数列中任意两个相邻的数进行交换。对于任意一个数,每被交换一次其状态便会被取反。询问对数列进行操作后能否使其变为单调不下降序列,并且最终每个数的状态均为1。 算法概述 容易发现,
阅读全文
摘要:前言 看这道题不爽很久了,但一直没有开它,原因是我不会~~(我太菜了)~~,看了题解还是写不来,因为我不会线段树合并。 然后今天学了dsu on tree这种神奇的科技,成功把它A了,效率吊打线段树合并。 于是写篇题解纪念一下。 题目链接 洛谷P1600 天天爱跑步 算法概述 不带修改的树上路径信息
阅读全文
摘要:[CQOI2017] 小Q的棋盘 题目链接:洛谷P3698 题意简述 给定一棵树,点数为n,从根节点出发,每一步可以走向与当前点有直接边相连的点,问走m步最多能经过多少个点。边和点均可以重复经过,但不重复计数。 算法概述 \(f[p][j]\) 表示从 \(p\) 出发走向以 \(p\) 为根的子树
阅读全文
摘要:题意简述 给定 \(n(n<=50)\) 个长度不超过 \(l(l<=5000)\) 的序列,以及一个长度为 \(m(m<=250000)\) 的索引序列,每个索引表示某一序列的编号,然后按照这 \(m\) 个索引的顺序,将小序列组成一个大序列,求这个大序列的最大子段和。 算法概述 首先看到数据范围
阅读全文
摘要:题意简述 题目链接 给定一n个点、m条边的森林,q次操作,操作分两种:1.给定一个点x,要求x所在的树的直径;2.给定两个点x,y,选取x所在树中的一个点u,y所在树中的一个点v,新增一条边(u,v),合并两棵树,使得合并后的新树的直径最小。 算法概述 对于初始的森林,显然可以dp一遍求出所有树的原
阅读全文
摘要:题外话 这道题…… 一道黄题。 一道简单的思维题。 题意简述 题目链接 有一个量,初始为m,每单位时间可将其+1或-1或不变。现有n个三元组(t,l,r),要求且仅要求在t时刻该量的值需要在区间[l,r]内,问是否能满足这n个三元组的要求。 算法概述 数据中n个三元组都是按t的顺序给出的,所以无需我
阅读全文
摘要:题意简述 题目链接 给定一棵无根树,要求回答m次询问,每次询问给定两个点u,v,求树上与这两个点距离相等的点的个数。距离定义为树上两点间的边数。 算法概述 这道题难度评定成紫色着实有点过了,个人感觉封顶蓝色。毕竟前置知识只有一个树上倍增,而且也没什么思维难度,就简单分类讨论一下就完事了。 手动画一画
阅读全文
摘要:题意简述 题目链接 给定一张n个点m条边的无向图,满足m-n<=20,然后进行q次操作,每次给定两个点,询问两点间最短路。 数据范围:1<=n,m,q<=105。 算法概述 只看题面显然是个裸的全源最短路,但是再看数据范围……显然不是全源最短路。 所以这时候就需要发挥我们的聪明才智,在题目中找一些特
阅读全文
摘要:此题为本人在Codeforces上独立AC的第一道洛谷紫色难度的题目,极具纪念意义,特此发布题解。 题意简述 题目链接 给定一棵无边权的树,初始点权均为0,保证除根节点外其余节点的度数不超过2。执行m次操作,每次操作为以下两种操作之一:(1)0 u x d 将距离节点u不超过d的点的权值加上x;(2
阅读全文
摘要:题意简述 题目链接 给定一棵有根树,每次给定k个节点,询问是否存在一条以根节点为一端的链,使得这k个节点到这条链的距离均<=1(只需判断可行性,无需给出方案)。 算法概述 思维题一般都需要我们分析出一些题目的性质。 这道题最特殊的点显然在于其要求的距离小于等于1,也就是说,这k个点要么在链上,要么在
阅读全文
摘要:题意简述 题目链接 给定一棵无根树,每个节点要么是黑点要么是白点,要求对于每个节点u,选出包含u的一个连通子图,使cnt1-cnt2最大化,其中cnt1为该连通子图内白点数,cnt2为连通子图内黑点数。 算法概述 记每个节点的权值w[u]为1或-1,1表示该点为白点,-1表示该点为黑点。 定义dp[
阅读全文
摘要:题意简述 题目链接 给定一张n个点的有向图,一个长度为m的点号序列,表示图中一条路径(不保证是简单路径),要求选出其一个子序列,使得原序列是依次经过该子序列中所有点的一条最短路径,最小化子序列长度并输出该子序列。 算法概述 把原序列变成子序列,要使子序列长度最小化,则对于原序列中的点,当然是能删就删
阅读全文
摘要:前言 一道挺好的思维题。 本人蒟蒻一枚,这题是本人独立A掉的第一道洛谷蓝色难度的CF思维题,极具纪念意义。故本人会将思考过程尽量全面地记录下来,以观察思考的不足之处。 题意简述 题目链接 给定一棵树,初始时全为白点,要求按以下方法进行n次染色操作: 1.第一次可以任意选择一个节点染成黑色。 2.以后
阅读全文
摘要:题意简述 题目链接 给定一棵边权均为1的树,m个询问,每次给出五个参数x,y,a,b,k,其中x≠y,连一条新的无向边(x,y),询问a,b两点间是否存在一条长度为k的路径,路径可以重复经过某些点或某些边。 算法概述 这道题与加工零件有异曲同工之处。区别在于本题是在树上连新边后询问,而后者是在图上直
阅读全文
摘要:一道挺好的思维题。 题意简述 题目链接 给定一张边权均为1无向图,共Q次询问,每次给出两个参数a,L,询问1号点到a号点之间是否存在长度为L的路径,其中边和点可以经过多次。 算法概述 将1号点到每个点之间的路径长度设为dis,则对于每个询问,若L<min(dis[a]),显然无解。 当L>=min(
阅读全文
摘要:题意简述 题目链接 给定一棵树,每个节点有一个权值k,表示该节点有多少个海狸,从根节点出发,每吃一个海狸便能够且必须跳到与当前节点有直接边相连的节点上,要求最终跳回根节点,求最多能吃多少个海狸。 算法概述 考虑每个节点产生的贡献。 首先明确一点:每个节点产生的贡献与且只与其儿子节点有关。 先dfs递
阅读全文
摘要:题意简述 题目链接 给定一张无向图和两个权值G、S,图中每条边有两个权值au,ag,求一棵生成树,设树边中最大的权值au为A,最大的权值ag为B,需使下式最小化:G*A+S*B。 算法概述 【暴力】 该题要求一棵特殊的最小生成树,显然Kruskal无法直接求出有二维权值限制的最小生成树,所以我们考虑
阅读全文
摘要:原题链接 原题链接 算法介绍 整道题可以分成两部分来看。 对于仅有一行的部分: 整个矩阵退化为一个序列,整个问题就变成一个序列上的问题。 简化题意:给定一个序列,每次询问在一段区间内取若干个数,其总和是否能够大于一个给定值。 考虑如下做法: 对于每次询问,二分一个权值t,判断区间内权值大于等于t的所
阅读全文
摘要:静态区间第k小数 原题链接 算法概述 我们在“值域”上建立线段树。每个节点维护一段值域区间[L,R],并记录序列中数值落在这段值域区间[L,R]内的点有多少个,记为cnt。 先不考虑下标区间[l,r]的限制。对于询问整个序列A1~An中的第k小数,我们执行线段树的查询操作,对于每个线段树上的节点,只
阅读全文
摘要:原题链接 原题链接 算法概述 读完题目,显然可以用主席树做。 把所有的插入与撤销操作看成一个序列,按其操作顺序编号,则下标最多为1~n(因为有查询操作的存在,下标实际上不可能到n)。 在下标上建立主席树。 每个节点记录其所代表的下标区间内已经插入的字母个数。特别地,叶子节点需要额外记录其下标所对应的
阅读全文