对图跑一遍 tarjan,对边双通缩点得到一棵树,答案就是树上两点路径之间的点权和。 因为过程中有加边操作,考虑用 LCT 来维护边双通。 在加边时,若加入这条边没有形成环,则直接加边。若形成了环,则需要在 LCT 上进行暴力缩点。 考虑每个节点维护一个 b e l [ u ] bel[u] bel[u] 表示每个点所在的边双通, LCT 辅助树上只维护边双通的代表点,其它的点不维
题意: 对于一个字符串 ∣ S ∣ |S| ∣S∣,我们定义 f a i l [ i ] fail[i] fail[i],表示最大的 x 使得 S [ 1.. x ] = S [ i − x + 1.. i ] S[1..x]=S[i-x+1..i] S[1..x]=S[i−x+1..i],满足 ( x < i ) (x<i) (x<i) 显然对于一个字符串,如果我们将每个 0 < =
正题 P4338 题目大意 有一棵树,告诉你每个点access的次数(带修改),问实链切换的最多次数 解题思路 先考虑离线的做法: 对于点 x,其不同儿子的子树access会使实链切换(对于点 x access 同理),每次都让不同儿子的子树 access,显然可以让答案最大化 但答案不一定是 s z x − 1 sz_x-1 szx−1(最后无法切换),因为如果存在一个
题目描述 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含个 N N N节点 M M M条边的无向图,节点标号为 1 ⋯ N 1\cdots N 1⋯N,边标号为 1 ⋯ M 1\cdots M 1⋯M。初始时小E同学在号节点 1 1 1,隐士则住在号节点 N N N。小E需要通过这一片魔法森林,才能够拜访到隐士。 魔法森林中居住了一些妖怪。每当有
找个要打懒标记的裸题刷一刷Orz 然后数组没清干净结果RE了好久 #include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#define SF scanf#define PF printfusing namespace std;typedef long long