
牛客训练
牛客
TURNINING
太蒻了
展开
-
牛客 树的距离
传送门题意:有一颗有根树,根节点为1,赋有边权。现有m次询问,每次询问在x的子树中所有与x距离大于等于k的点与x的距离之和。思路1:x于子树中某节点的距离就是 该节点到根节点的距离 - x到根节点的距离。那么我们维护一下x子树中所有点到根节点的距离,求出所有距离大于等于k+d[x]k+d[x]k+d[x]的和sumsumsum,再求出点的个数cntcntcnt,答案就是sum−d[x]∗cnt。sum - d[x] * cnt。sum−d[x]∗cnt。显然主席树可行。这是一种在线的做法#includ原创 2021-08-25 16:04:59 · 268 阅读 · 0 评论 -
2021牛客暑期多校训练营9 E.Eyjafjalla
题意:求点权在[l,r][l,r][l,r]范围内最大连通块元素的数量,且必须包含x思路:根据越往靠进根节点温度越大这个性质,我们可以发现只要找到x向上最远能传染到的那个点,我们求那个点子树中点权满足[l,r][l, r][l,r]的数量就行了。找点根据单调性可以二分。线段合并:给每个点建立一颗权值线段树,边dfs边向上合并,这样dfs结束后u上的线段树维护的就是u子树的值域。这样写得保证在合并过程中不破坏子树线段树的结构,我们可以在合并的过程中再复制一个节点,不过这样空间的开销会增大一倍。时间复杂度原创 2021-08-19 10:06:57 · 187 阅读 · 0 评论 -
2021牛客暑期多校训练营3
B Black and white思路:通过观察我们发现,我们其实最多只用选n + m - 1个点就好了,其它的点对答案的贡献为0。那么我们不是贪心的选择这n+m-1个格子就好了?还有一个问题,我们不能让一个小正方形4个点全都被选。这里有这样一个技巧,把一个点(i, j) 拆分成两个不同的点Ai Bj,当我们选择把这个点涂黑时就给Ai,Bj连一条边。只有正方形4个点全选才会改变连通性(可以自己画一下),那么我们跑一次最小生成树就行了。#include<bits/stdc++.h>usin原创 2021-07-25 13:04:56 · 134 阅读 · 0 评论