#\(\mathcal{\color{red}{Description}}\) \(Link\) 给定一棵以\(1\)为根的树,有两种操作: \(C: \ \ x\)给点\(x\)打上花标记. \(Q: \ \ x\)求点\(x\)的最近被标记祖先(自身包括) #\(\mathcal{\color{red}{Solution}}\) 这个题--操作水的很但是我还是没能秒掉,我们考虑对于一个节点,单纯考虑线段树的话好像并不可做.那么我们先来考虑简单的,对于一个点,如果要查找一个点的最近标记祖先,那…
参考了皎月半洒花的博客 看到树想到树剖,由于要取距自己到根离自己最近的标记点,刚开始想到线段树里存节点深度,查询时返回最大值.但是这样的话只能得到节点深度,无法得知节点编号,就想倍增乱搞一下,求出标记点,复杂度\(O(\log ^ {3}\;N)\) 虽然可以过但是实现有点复杂,就看了一下上面的博客 真的很强,由于树剖dfs时一条链上的编号是连续的,在此链中且深度越大线段树编号越大,所以我们可以在线段树里存当前节点的线段树编号,也达到了维护深度最大值的效果 答案就是ori [ (一条链中) MA…
题目链接: https://www.luogu.org/problemnew/show/P4092 瞎扯--\(O(Q \log^3 N)\)解法 这道先yy出了一个\(O(Q \log^3 N)\),的做法,先树链剖分. 对于加标记操作,找到那个点所在的链,将其\(top\)标记一下,然后该点到根节点区间和+1. 对于查询操作,先看这个点所在链有没有标记,如果没有,就一直向上跳直到找到一条标记了的链,然后在那条链上根据到根节点区间和进行倍增/二分 然后出去吃饭的时候忽然想到了\(O(Q \lo…
[HEOI2016/TJOI2016]树 思路 做的时候也是糊里糊涂的 就是求最大值的线段树 错误 线段树写错了 #include <bits/stdc++.h> #define FOR(i,a,b) for(int i=a;i<=b;++i) using namespace std; const int N=6e5+7; int read() { int x=0,f=1;char s=getchar(); for(;s>'9'||s<'0';s=getchar()) if(…
[题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种题目都要从\(0\)开始或许比较好(Itst语) 然后就开始化式子吧 原式= \[ \sum_{i=0}^{n} \sum_{j=0}^n {i \brace j}2^j j! \] 斯特林容斥式子展开一下,并且我们知道当\(k>j\)时,\({j \choose k}=0\),所以扩大枚举范围到\…
正解:并查集/树链剖分+线段树 解题报告: 传送门 感觉并查集的那个方法挺妙的,,,刚好又要复习下树剖了,所以就写个题解好了QwQ 首先说下并查集的方法趴QwQ 首先离线,读入所有操作,然后dfs遍历整棵树,如果当前点有标记就fa[i]=i,否则fa指向父亲节点 然后倒叙查答案,每次碰到Q答案就fa[i],碰到C就把修改的那个点的标记次数--,当标记次数=0的时候fa就指向父亲节点辣 over 484很妙昂! #include<bits/stdc++.h> using namespace st…
题目大意:给你一棵树,有两个操作: $C\;x:$给第$x$个节点打上标记 $Q\;x:$询问第$x$个节点的祖先中最近的打过标记的点(自己也是自己的祖先) 题解:树剖,可以维护区间或,然后若一段区间为$0$则跳过,否则在线段树上二分 卡点:二分部分多大了一个$=$,然后$MLE$ C++ Code: #include <cstdio> #include <algorithm> #include <ctime> #include <cctype> #incl…
这道题原来很水的? noteskey 一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降 这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人问号... 然后才发现原来是求的子序列是满足任意一次修改后不降... 于是列出两(san)个条件式子,就可以 CDQ 切掉了 QWQ \(j<i\) \(a_j<min_i\) \(max_j<a_i\) 这里的 max 和 min 就是某个位置上出现过的最 大/小 值 watch out…
Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作: 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记.) 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖先) 你能帮帮他吗? Input 输入第一行两个正整数N和Q分别表示节点个数和操作次数 接下来N-1行,每行两个正整数u,v(1≤u,v≤n)表示u到v有一条有向边 接下来Q…
https://www.lydsy.com/JudgeOnline/problem.php?id=4551 https://www.luogu.org/problemnew/show/P4092 这当然是树剖裸题,还可以不写线段树用set (只用set达到一个log是不行的,询问中,中间遇到的路径并不总是整段的轻/重链,可能会有半段的) #include<cstdio> #include<algorithm> #include<cstring> #include<…