连押宝两场了,血亏。
先想T2,思路上有了,实现还不清晰。犹豫着还是想把原题打了,于是头铁去啃T3。
鉴于码力不强,信心不足,越调越自闭。好多nc错误,最后还是考后AC
之后考试还是打暴力别懒,想到正解在难码或者无大样例的情况下还是优先码暴力。
B. girls
题意:n个点,m条边,定义合法三元组(i,j,k),i<j<k,且两两之间没有连边。求(sumlimits_{(i,j,k)} A imes i+B imes j+C imes k)。n m<=2e5,A B C>=0,无重边自环。
答案可以拆开考虑每个点的贡献,然后比较容易想到容斥。
用全集-至少一条边不合法的三元组贡献+至少两条边-三条边
然后大力分类讨论,用各种前缀和操作可以解决前三部分
对于三条边的情况,实际上就是找三元环
这是个经典问题(但我忘了)
具体做法是:
按度数、编号双关键字判断,小的向大的连边
然后枚举边,两个端点枚举出边,一边打标记,一边查询
从连边规则容易知道新图是DAG,每个三元环仅被一条边统计到,不重不漏。
而新图上每个点的度数都(leq sqrt m)。考虑反证,若>,由于指向的都是度数不减的点,那么边数(>m),不符。
不知道为啥康别人的代码好像并没有在计算一条边的时候考虑另外一个点的贡献?
C. string
题意:n个字符串,m个操作。支持
1.在x字符串后加字符
2.询问字符串x在第y次全局操作后,在当前的z字符串中出现次数
3.本质不同子串数
4.求字符串T在n个串中最多的出现次数。
n<=20,Q<=2e5,(sum|S|leq 2e5,sum|T|leq 2e7)
DY大神讲过的题。
思路较简单,但是难码。
1操作 记录每个串在exsam上的结束节点,相当于bfs建树。
3操作 动态维护(sum len[i]-len[fa[i]]),实际上只有np点有贡献
2操作 答案为串x在y次操作后在parent树上的节点的子树中来自z串的endpos大小,子树和转链加。需要动态维护parent树,支持链加,同时维护n个串的信息,上LCT
4操作 答案为T在exsam上节点子树内所有串的最大endpos
实现上:
链到根,适合不换根LCT
插nq点时,可以在link cut函数内实现对操作父亲的链加,更改贡献。移花接木差不多
打标记时一定要access再splay,标记要打在对应完整链splay的根上
获取节点信息时候要splay。
T1先咕了。。。