随笔分类 - 

上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要:和【洛谷5115】挺像的. 都是统计信息的时候是包含两个树的,那就在一个树上边分治,另一个树上跑一个虚树dp就好了. 式子这么拆: $dep[i]+dep[j]-(dep[LCA(i,j)]+dep'[LCA'(i,j)]$ $\Rightarrow dep[i]+dep[j]-\frac{1}{2 阅读全文
posted @ 2019-12-28 14:25 EM-LGH 阅读(155) 评论(0) 推荐(0)
摘要:绝对是我写过最长的一份代码了. 这个快敲吐了. 通过这道题能 get 到一个套路: 两颗树同时统计信息的题可以考虑在个树上跑边分治,把点扔到另一颗树的虚树上,然后跑虚树DP. 具体地,这道题中我们发现 $LCP$ 长度是反串后缀树 $LCA$ 深度,$LCS$ 是正串后缀树 $LCA$ 深度. 我们 阅读全文
posted @ 2019-12-27 15:48 EM-LGH 阅读(247) 评论(0) 推荐(0)
摘要:这是一道边分治的例题. 一般来说,我们在树上求最优化问题或者求点值固定,但是和边权和有关的问题时可以考虑用一下边分治. 不同与点分治是以点为重心边分,边分治是以边为重心进行分治的. 我们知道,一个点可以和若干条边相连,但是一条边只能连接两个端点,这在统计上就给我们提供了方便(统计两个树的影响就行) 阅读全文
posted @ 2019-12-27 09:03 EM-LGH 阅读(157) 评论(0) 推荐(0)
摘要:这个和 QTREE5 的套路是一样的,就是维护一个深度最深/浅的距离和,然后合并一下就好了. code: #include <map> #include <string> #include <cstdio> #include <cstring> #include <algorithm> #defin 阅读全文
posted @ 2019-12-26 14:57 EM-LGH 阅读(174) 评论(0) 推荐(0)
摘要:注意:$LCT$ 在 $link$ 的时候必须要 makeroot. 假如要将 $y$ 连到 $x$ 上: 如果只是将 $y$ Access 并 splay 然后直接连到 $x$ 上的话你会发现 $y$ 在 $splay$ 中所有左儿子其实都在 $(x,y)$ 之间,而这显然就不对了. code: 阅读全文
posted @ 2019-12-26 11:53 EM-LGH 阅读(139) 评论(0) 推荐(0)
摘要:对与每一个时刻用主席树维护一下 DFS 序即可. LCA 的话树剖求解比较快. code: #include <cstdio> #include <string> #include <cstring> #include <algorithm> #define N 200006 using names 阅读全文
posted @ 2019-12-26 09:35 EM-LGH 阅读(125) 评论(0) 推荐(0)
摘要:这道题的思路很神啊 ~ #include <cstdio> #include <string> #include <cstring> #include <algorithm> using namespace std; const int N=200006; int cur_id; namespace 阅读全文
posted @ 2019-12-24 20:55 EM-LGH 阅读(323) 评论(0) 推荐(0)
摘要:明明可以用二维数点来做啊,网上为什么都是树剖+线段树呢 ? code: #include <cstdio> #include <cstring> #include <algorithm> #define N 100006 #define inf 1000000 #define ll long lon 阅读全文
posted @ 2019-12-24 18:55 EM-LGH 阅读(216) 评论(0) 推荐(0)
摘要:这个题的思路非常好啊. 我们可以把 $k$ 个点拿出来,那么就是求将 $k$ 个点划分成不大于 $m$ 个集合的方案数. 令 $f[i][j]$ 表示将前 $i$ 个点划分到 $j$ 个集合中的方案数. 那么有 $f[i][j]=f[i-1][j-1]+f[i-1][j]*(j-fail[i])$, 阅读全文
posted @ 2019-12-24 13:37 EM-LGH 阅读(147) 评论(0) 推荐(0)
摘要:code: #include <cstdio> #include <algorithm> #define N 50020 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; stru 阅读全文
posted @ 2019-12-23 16:44 EM-LGH 阅读(132) 评论(0) 推荐(0)
摘要:你发现平均值不会很大,所以直接暴力枚举平均值,然后跑 4*100 次最小生成树取最小值即可. code: #include <cstdio> #include <cmath> #include <algorithm> #define N 2005 #define ll long long #defi 阅读全文
posted @ 2019-12-23 16:28 EM-LGH 阅读(156) 评论(0) 推荐(0)
摘要:以前一直以为这道题很恶心,事实证明还好,好多地方脑残写丑了. code: #include <cstdio> #include <string> #include <cstring> #include <algorithm> #define N 50003 using namespace std; 阅读全文
posted @ 2019-12-21 16:00 EM-LGH 阅读(207) 评论(0) 推荐(0)
摘要:题意:给定一颗树,有 $m$ 次操作. 操作 0 :向集合 $S$ 中加入一条路径 $(p,q)$,权值为 $v$ 操作 1 :给定一个点集 $T$,求 $T$ 的并集与 $S$ 中路径含交集的权和.(就是如果路径 $i$ 与 $T$ 有交集,就产生 $v_{i}$ 的贡献) 数据范围:路径长度 $ 阅读全文
posted @ 2019-12-20 17:56 EM-LGH 阅读(269) 评论(0) 推荐(0)
摘要:思路并不难,主要是细节需要注意一下. 在 lct 中,删边要写成:f[lson]=0,lson=0 (因为删 x->y 时 y 不一定是左儿子,y 只是 x 的前驱) 然后 f[lson]=lson=0 这个写法在一些编译器上是错误的(就是你会发现 f[lson] 中这个 lson 会变成 0 ) 阅读全文
posted @ 2019-12-17 11:28 EM-LGH 阅读(137) 评论(0) 推荐(0)
摘要:这个思路挺有意思的 ~ 利用树链的并来保证每个颜色只贡献一次,然后用可持久化线段树维护 code: #include <set> #include <cstdio> #include <cstring> #include <algorithm> #define N 100005 #define se 阅读全文
posted @ 2019-12-16 16:04 EM-LGH 阅读(145) 评论(0) 推荐(0)
摘要:自己独立想出来的,超级开心 一开始想的是对于每一个点分别算这个点对答案的贡献. 但是呢,我们发现由于每一条路径的贡献是该路径颜色种类数,而每个颜色可能出现多次,所以这样就特别不好算贡献. 那么,还是上面那句话,由于算的是颜色种类,所以我们可以对每一个颜色种类单独算贡献. 即不以点为单位去算,而是以颜 阅读全文
posted @ 2019-12-16 11:31 EM-LGH 阅读(156) 评论(0) 推荐(0)
摘要:code: #include <bits/stdc++.h> #define N 200009 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; ll Sum[N]; int n, 阅读全文
posted @ 2019-12-06 20:14 EM-LGH 阅读(180) 评论(0) 推荐(0)
摘要:自己 yy 了一个动态 dp 做法,应该是全网唯一用 LCT 写的. code: #include <bits/stdc++.h> #define ll long long #define lson tr[x].ch[0] #define rson tr[x].ch[1] #define setIO 阅读全文
posted @ 2019-12-05 20:25 EM-LGH 阅读(183) 评论(0) 推荐(0)
摘要:做这道题真的是涨姿势了,一般的CDQ分治都是在序列上进行的,这次是把CDQ分治放树上跑了~ 考虑一半的 CDQ 分治怎么进行: 递归处理左区间,处理左区间对右区间的影响,然后再递归处理右区间. 所以,如果是有坐标不递增的斜率优化的话就用 CDQ 分治先处理出左半部分答案,然后将处理好的左区间答案用来 阅读全文
posted @ 2019-12-04 20:50 EM-LGH 阅读(277) 评论(0) 推荐(0)
摘要:标签:树形dp,枚举,树的直径 一上来看到这个题就慌了,只想到了 $O(n^3)$ 的做法. 碰到这种题时要一步一步冷静地去分析,观察数据范围. 首先,$n\leqslant 5000$,所以可以先 $O(n)$ 枚举切断哪条边. 而如果暴力枚举连哪条边的话时间就是爆炸的,不妨冷静地分类讨论一下. 阅读全文
posted @ 2019-12-02 10:36 EM-LGH 阅读(151) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 ··· 9 下一页