2025.4.7 NOI 模拟赛 题解

比赛

T1 NFLS #P10258. 那这不就是原神吗

题意

给定两棵 \(n\) 点的树 \(T_1,T_2\),令 \(\text{dis}_1\)\(\text{dis}_2\) 分别为两棵树上两点间距离,求出 \(\sum_{1\le u<v\le n}\text{dis}_1(u,v)\text{dis}_2(u,v)\)\(n\le3\times10^5\)

分析

\(T_1\) 点分治,设当前分治中心为 \(M\),其各个子树为 \(S_{1\sim k}\),令 \(S_0=\{M\}\)\(S=\bigcup_{i=0}^k S_i\),令 \(d_u\)\(T_1\)\(u\)\(M\) 的距离,则此时需要求出

\[\sum_{u\in S_x,v\in S_y,0\le x<y\le k}(d_u+d_v)\;\text{dis}_2(u,v) \]

拆为

\[\sum_{u,v\in S}(d_u+d_v)\;\text{dis}_2(u,v)-\sum_{i=0}^k \sum_{u,v\in S_i}(d_u+d_v)\;\text{dis}_2(u,v) \]

转化为给定一个连通块 \(S\),求出

\[\sum_{u,v\in S}(d_u+d_v)\;\text{dis}_2(u,v) \]

建出 \(T_2\)\(S\) 内点的虚树,虚树上 \(S\) 内点的点权为 \(d_i\),额外点点权为 \(0\)

对于虚树上的一条边 \((u,v)\),设 \(w=\text{dis}_2(u,v)\)\(u\) 一侧 \(S\) 内点的 \(d\) 的集合为 \(S_u\)\(v\) 一侧的集合为 \(S_v\),则这条边的贡献为 \(w(|S_v|\sum_{d\in S_u}d+|S_u|\sum_{d\in S_v}d)\)

这样处理一个连通块的时间复杂度为 \(O(|S|\log |S|)\)

\(O(n)-O(\log n)\)\(\text{lca}\) 换为 \(O(n\log n)-O(1)\)\(\text{lca}\),预先对点按 \(\text{dfn}\) 进行一次排序,每次分割连通块时同时分割序列,则处理一个连通块是时间复杂度可做到 \(O(|S|)\)

总时间复杂度 \(O(n\log^2 n)\)\(O(n\log n)\)

代码

参考

T2 NFLS #P23956. 那咋了 \(\quad\) CF923F Public Service 加强版

题意

给定两棵 \(n\) 点的数 \(T_1,T_2\),构造一个排列 \(p_{1\sim n}\),使得对于 \(T_1\) 中任意边 \((u,v)\)\(T_2\) 中不存在边 \((p_u,p_v)\)\(n\le10^5\),保证有解

分析

\(n\le 5\) 时暴力枚举

\(T_1\)\(T_2\) 为菊花,则根无法与任意一点连接,显然不会出现这种情况

\(T_1\)\(T_2\) 为菊花下挂一个点,假设为 \(T_1\)(否则交换 \(T_1,T_2\),把得到的排列换为逆排列即可),设挂的点为 \(x\),菊花的根为 \(u\),两者之间为 \(v\),即 \(T_1\) 中有 \(x-v-u\) 的链,则在 \(T_2\) 中找到两个叶子 \(u,v\),令 \(x\) 为与 \(u\) 相连的点,需要满足 \(x\)\(v\) 不相邻且删去 \(u,v\) 后剩余部分不为菊花

容易 \(O(n)\) 找出这六个点,然后 \(x-x',u-u',v-v'\),剩余点任意匹配即可,时间复杂度可以到 \(O(n)\),其中 \(n\) 表示剩余点数量

\(T_1,T_2\) 都不是菊花下挂一个点,则考虑在 \(T_1\) 中找出两个叶子 \(u,v\)\(T_2\) 中找出两个叶子 \(u_1,v_1\),满足在对应树中找出的叶子不相邻且去掉两个叶子后剩余部分不是菊花,设 \(u\) 连向 \(nu\)\(v\) 连向 \(nv\)\(u_1\) 连向 \(nu_1\)\(v_1\) 连向 \(nv_1\),则把 \(u,v,u_1,v_1\) 删去,对剩余部分递归求解,若得到的 \(nu\) 匹配 \(nv\)\(nu_1\) 匹配 \(nv_1\) 则令 \(u\) 匹配 \(v_1\)\(v\) 匹配 \(u_1\),否则令 \(u\) 匹配 \(u_1\)\(v\) 匹配 \(v_1\)

找叶子的一种实现为:若根的度数为 \(n-3\) 则找一个与根相连的叶子和一个不与根直接相连的叶子,相连点编号最小、次小、最大的叶子中必然同时包含两者,从中枚举判断即可;若为一般情况,则选择相连点编号最小、最大的叶子即可。这一过程容易通过维护若干个 set \(O(\log n)\) 实现

时间复杂度 \(O(n\log n)\),需要注意常数

代码

参考

T3 NFLS #18058. 别急 \(\quad\) CF1842I Tenzing and Necklace

比赛结果

\(15+12+36\)\(\text{rk}44\)

posted @ 2025-04-08 07:05  Hstry  阅读(17)  评论(0)    收藏  举报