03 2020 档案
摘要:两种操作: 1.查询与树上结点x距离不超过k的结点权值之和 2.将结点x的权值修改为y 点分树模板题。 首先考虑一种比较暴力的做法:用树形dp的思想,将树转化成有根树,设f[u][k]为结点u子树下与其距离不超过k的点权和,则ans(x,k)=f[u][k]+f[fa[u]][k-1]-f[u][k
阅读全文
摘要:题目链接 注意到每种冰激凌在树上的结点是连通的。如果整棵树是一条链的话,那么问题就转化成了经典的一维区间染色问题。 所以我们要考虑如何把链上的情况推广到树上的情况。 一开始我想把欧拉序转换成区间来做,然而发现并不可行,因为一颗连续的子树可能会形成许多个连续的区间,需要另辟蹊径。 任选一个结点作为树根
阅读全文
摘要:题意:找出能被d整除且数位和为s的最小值。(d<=500,s<=5000) 设状态(S,M)表示数位和为S,对d取模为M的数,则题目等价于求从(0,0)转移到(s,0)的最小字典序最短路。 因为每个结点所连的所有边权都是唯一的,所以直接从起点bfs即可。(如果边权不唯一,需要把边权相同的作为整体处理
阅读全文
摘要:题意:无向图,边带权,问从1到n最少经过的结点数量,以及在此基础上经过的边权字典序最小的路径。 以1为源点bfs,每次把边权按从小到大的顺序进行遍历,边权相等的后继结点需要作为一个整体进行后续的bfs,这样能保证每个结点第一次被访问时的路径都是字典序最小的最短路径。 1 #include<bits/
阅读全文
摘要:题目链接 n个人按编号顺序站成一排,有两种约束: 1.A,B之间距离不超过c 2.A,B之间距离至少为c 差分约束模板题,注意最长距离模型要用最短路去解 对于第1类约束有d[B]-d[A]<=c,由A->B建立一条权值为c的边对于第2类约束有d[B]-d[A]>=c,取反得d[A]-d[B]<=-c
阅读全文
摘要:题目链接 可以将左半部分区间划分为[1,b1],[b1+1,b2],[b2+1,b3]...若干个小段,每一段都可以和右半部分对称位置上的做交换。 根据Burnside引理,等价类的个数等于所有置换不动点个数的平均值。又根据Polya定理,置换f不动点的个数等于$A^{m(f)}$,A为颜色数,m(
阅读全文
摘要:题目大意:n个点和m条限制(n,m<=4e5),每条限制可以规定两个点: 1)都是白色2)都是黑色3)一白一黑 问最多有多少个黑点,如果不能满足所有限制条件则输出impossible。 这是去年在训练赛上打过的一道题,因为比较经典所以决定fuxi一下。当时我很早就写出来了,然而wa了很多发最后才过的
阅读全文
摘要:题意是有一张无向连通图,边带权,每走过一条边需要消耗一定的电量。有k个关键点可以充满电,问从一个关键点走到另一个关键点,需要的电池容量至少是多少。 首先可以分析一下极端情况: 1.k=2:问题转化成求两点间最短路 2.k=n:问题转化成求最小生成树 所以要把两者综合起来考虑。 首先对所有关键点求一个
阅读全文
摘要:我最开始接触k短路时用的是A*算法,后来我从某位大佬那里得知A*算法的复杂度不稳定,可能会退化成平方级别的(比如,所有结点首尾相连成环) (注:A*算法不会降低时间复杂度!不用A*算法,用一个普通的优先队列照样可以做,复杂度是一样的,就是A*在一般情况下更快而已) 于是学了下用可持久化可并堆维护数据
阅读全文
摘要:题目链接 18年沈阳网赛的题,一直想补但一直鸽着,终于还是补上了 一棵树,点带权,支持两种操作: 1.深度d上的权值加上x 2.询问子树u下的权值和 对每个深度按结点数量分类,结点数小于$sqrt(n)$的为1类,其余的为2类 对于1类深度,修改时暴力修改每个结点的值,查询时用树状数组 对于2类深度
阅读全文
摘要:题目链接 二维平面RMQ问题,单点修改,区间询问最大最小值 树套树或者四叉树均可做 树套树版本: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=500+10,mod=1e9
阅读全文
摘要:题目链接 一开始的想法是让物品按数量从小到大或者从大到小贪心,然而怎么想都不对,最后发现应该按价格贪 首先求出最终的物品数量序列(扫一遍即可) 然后把所有物品按价格从大到小排序,每次选价格最大的去匹配尽量小的数量(必须大于等于原来的数量),用multiset实现即可 1 #include<bits/
阅读全文