2022保研夏令营/预推免记录:浙大计院直博/西湖电子直博/南大软院/厦大信院 从今年3月到9月,我的保研之旅终于也落下帷幕。中间有焦虑,纠结和痛苦,但最终还是得到了一个很好的结果。特以这个blog,记录一下过程中的一些信息,也可以供后来者参考。
G. Rikka with Intersections of Paths(2018-2019ICPC徐州)【树链剖分+线段树】 G. Rikka with Intersections of Paths(2018-2019ICPC徐州)【树链剖分+线段树】题意给定一棵 nnn 个点的树和 mmm 个树上的简单路径的端点点对,求从 mmm 条路里选 kkk 条,满足这 kkk 条路有至少一个点是公共点的方案数。思路歪掉的思路模拟赛的时候想着想着就以为是 kkk 条路连通了,于是写了个单点修改、区间查询的树链剖分,然后对路径排序,按照 lca(u,v)lca(u, v)lca(u,v) 的深度从深往浅处理,每次先统计这条路径上
D. The Strongest Build(Edu Div. 2#114)【优先队列搜索】 D. The Strongest Build(Edu Div. 2#114)【优先队列搜索】题目传送门(逐渐懒惰)思路只有十个槽,所以大胆一点,存十个槽的状态,从所有槽都是最后一个开始向下宽搜(因为有序递增,所以都选最后一个是最优解),优先队列以当前这个状态的能力和为优先级。简单的说就是宽搜板子,,,就是赛场上傻掉了居然想直接用longlong存状态(不知道为什么以为每个槽也只有10个深度)代码#include <bits/stdc++.h>#define pb push_back
D. Lowbit(The 15th Chinese Northeast Collegiate Programming Contest)【线段树】【区间】 D. Lowbit(The 15th Chinese Northeast Collegiate Programming Contest)【线段树】【区间】传送门#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;const int mod = 998244353;ll lowbit(ll x){ return x & (-x);}
P6136 【模板】普通平衡树(数据加强版)——Treap解法 P6136 【模板】普通平衡树(数据加强版)wa了一下午,最后发现是INF设小了……需要注意的点:可能会查询一个不存在的数的rank数据范围 2302^{30}230,如果一般习惯用 0x3f3f3f3f 赋值的同学需要注意,230=1073741824,0x3f3f3f=10611095672^{30} = 1073741824 ,0x3f3f3f = 1061109567230=1073741824,0x3f3f3f=1061109567。(我在这WA了一下午)#include <b
[HDU-6862] Hexagon【构造】 [HDU-6862] Hexagon【构造】传送门题意遍历一个半径为 rrr 的平铺六边形中每个小六边形恰好一次,问最多拐多少次弯?左:半径的定义 右:方向的定义思路如下构造:可以看到,每圈都以4开头,以3结尾,之间是6组两个方向的重复,依此构造即可。代码#include <bits/stdc++.h>using namespace std;typedef long long ll;int mp[10][2];void print(int r) // 半径{
Tree Xor(2021牛客暑期多校训练营4)【线段树】 Tree Xor(2021牛客暑期多校训练营4)【线段树】传送门题意给定一颗树,每个点的权值 aia_iai 在 [li,ri][l_i, r_i][li,ri] 之间,已知每条边 u,vu, vu,v 的边权 wu,v=au xor avw_{u, v} = a_u \ xor \ a_vwu,v=au xor av ,思路参考:2021牛客多校4_bok_choy_的博客 队友的博客队友写的好好,我摸了()具体实现见代码注释代码#in
2021牛客暑期多校训练营9 2021牛客暑期多校训练营9E-Eyjafjalla思路以点1为根,可以发现这棵树有这样的性质:深度越深,温度越低。所以我们从当前点往根节点走,一直走到父亲节点的温度不在 [l,r][l, r][l,r] 区间内时停下,此时所在的节点就是病毒能够扩散到的深度最低的节点(这一步可以用倍增来做)。以这个节点为根节点的子树包含了所有被感染的节点,也就是说这颗子树外的节点不可能被感染。被感染的条件是温度在区间 [l,r][l, r][l,r] 之间,所以此时问题就转化为了找出这颗子树下有多少温度大于等于
2021牛客暑期多校训练营10 2021牛客暑期多校训练营10最后一次牛客,看到是cjb命题觉得应该是那种做起来很爽的题吧,毕竟打过很多次他命题的比赛都觉得体验非常好,结果两题罚坐到头……(没有说邦邦不好的意思(嗯)这个暑假的现场赛结束了(没有参加今年杭电,在vp去年的),希望自己有所进步,有所收获。(后期会看自己学习情况补其他题,先开个坑)F-Train Wreck思路把栈操作转换为树上操作(队友的思路绝绝子),如果是push就是在当前节点上添加一个子节点(并将指针转移到子节点上),如果是pop就是将指针移动到当前节点的父亲
E-Eyjafjalla(2021牛客暑期多校训练营9)【主席树】 E-Eyjafjalla(2021牛客暑期多校训练营9)【主席树】传送门思路以点1为根,可以发现这棵树有这样的性质:深度越深,温度越低。所以我们从当前点往根节点走,一直走到父亲节点的温度不在 [l,r][l, r][l,r] 区间内时停下,此时所在的节点就是病毒能够扩散到的深度最低的节点(这一步可以用倍增来做)。以这个节点为根节点的子树包含了所有被感染的节点,也就是说这颗子树外的节点不可能被感染。被感染的条件是温度在区间 [l,r][l, r][l,r] 之间,所以此时问题就转化为了找出这颗子树
[HDU-6832] A Very Easy Graph Problem【贪心】【搜索】 [HDU-6832] A Very Easy Graph Problem【贪心】【搜索】传送门题意对于给定的无向图,计算:KaTeX parse error: Undefined control sequence: \and at position 56: …times [a_i = 1 \̲a̲n̲d̲ ̲a_j = 0]思路对于第 iii 条边,如果 u,vu, vu,v 已经联通,那么此时 u,vu, vu,v 的距离之和最大是 ∑j=1i−12j\sum_{j = 1}^{i -
[HDU-6836] Expectation【矩阵树定理模板】 [HDU-6836] Expectation【矩阵树定理模板】传送门题意给定一个无向图,定义一颗生成树的权重是其所有边权的与,问任意选一颗生成树的权重期望。(每个生成树选择概率相同)思路首先,因为等概率,所以答案就是 所有生成树的权重和生成树个数\frac{所有生成树的权重和}{生成树个数}生成树个数所有生成树的权重和 。矩阵树定理可以 O(n3)O(n^3)O(n3) 求出一个无向图的生成树个数,也就是分母;其次对于边权的第 iii 位,其在生成树的最终权重中为 111 的唯一条件是该
P3833 [SHOI2012]魔法树(洛谷)【树链剖分+线段树模板】 P3833 [SHOI2012]魔法树(洛谷)【树链剖分+线段树模板】思路纯板子题,没有思维含量。但是不知道为什么数组要开2e5,非常迷惑。代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 2e5 + 10;struct line_tree{ struct node { int l, r; ll add, sum;
F-xay loves trees(2021牛客暑期多校训练营7)【双指针+树链剖分+线段树维护最大值】 F-xay loves trees(2021牛客暑期多校训练营7)题意给定两个树,找一个最大的子图,使得在第一棵树中任意两个节点互为祖先-子孙关系,在第二棵树中任意两个节点互不为祖先-子孙节点关系。思路参考:2021牛客暑期多校训练营7 F - xay loves trees - naymi - 博客园 (cnblogs.com)显然这些点在第一棵树上必然是一条链,所以我们用双指针维护这棵树上的一条链;对于这条链,判断其在第二棵树上是否满足条件的方法是:对于链上的每个节点,将其在第二棵树上以该点为
2021牛客暑期多校训练营7 2021牛客暑期多校训练营7F-xay loves trees思路参考:2021牛客暑期多校训练营7 F - xay loves trees - naymi - 博客园 (cnblogs.com)显然这些点在第一棵树上必然是一条链,所以我们用双指针维护这棵树上的一条链;对于这条链,判断其在第二棵树上是否满足条件的方法是:对于链上的每个节点,将其在第二棵树上以该点为根的子树全部染色(值+1),那么某个节点子树的最大值若是0,就可以加入链(并对子树染色),否则不能加入链(说明要么它的父节点已经染色,要么
2021牛客暑期多校训练营8 2021牛客暑期多校训练营8A-Ares, Toilet Ares思路直接按照样例解释的公式算就行代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 4933;ll qpow(ll x, ll n){ ll ans = 1; while(n) { if(n & 1) ans = (an
P3178 [HAOI2015]树上操作(洛谷)【树链剖分+线段树模板】 P3178 [HAOI2015]树上操作(洛谷)【树链剖分+线段树模板】思路这题是一个树链剖分模板题,本来是参照秦淮岸灯火阑珊的博客树链剖分(轻重链剖分)算法笔记自己写一遍树链剖分并作为以后的板子,结果非常不幸纠结了一整天才搞完。原博客的代码有点乱,我一直以为自己错是因为有细节错误,结果找了很久发现原博客的代码有 #define int long long ……于是把所有的int全部换long long就过了……代码#include <bits/stdc++.h>#define pb
H-Hopping Rabbit(2021牛客暑期多校训练营6)【扫描线】 H-Hopping Rabbit思路其实从 (x,y)(x, y)(x,y) 点出发和从 (x+d,y+d)(x + d, y + d)(x+d,y+d) 出发是一样的,因为左右都只能跳 ddd 的距离,那么有区别的出发点其实都可以归纳到 x∈[0,d),y∈[0,d)x \in [0, d), y \in [0, d)x∈[0,d),y∈[0,d) 的范围内。我们把所有的陷阱都通过这种方法映射到 x∈[0,d),y∈[0,d)x \in [0, d), y \in [0, d)x∈[0,d),y∈[0
2021牛客暑期多校训练营6 2021牛客暑期多校训练营6F-Hamburger Steak思路按照时间长短降序排序,并计算 ansbest=max(⌈avg(ti)⌉,max{ti})ans_{best} = max(\lceil avg(t_i) \rceil , max\{t_i\})ansbest=max(⌈avg(ti)⌉,max{ti}) ,之后按照时间降序安排锅中汉堡的时间,若当前锅时间已经超过 ansbestans_{best}ansbest ,就换到下一锅进行安排并截掉超出的那部分放入下一锅,这样可以完全