abc378
A
模拟。
B
模拟。
C
模拟。
D
爆搜。
E
题意
给一个序列 \(A\) 和一个正整数 \(M\),求:
\[\sum_{1 \leq l \leq r \leq N} \left( \left(\sum_{l \leq i \leq r} A_i\right) \mathbin{\mathrm{mod}} M \right).
\]
分析
先做个前缀和 \(S\),原式化为:
\[\sum_{1 \leq l \leq r \leq N} (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M,
\]
根据 \(S_r\) 和 \(S_{l-1}\) 的大小关系可以分两类。
\[ (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M = S_r - S_{l-1} + \begin{cases} 0 & (S_{l-1} \leq S_r) \\ M & (S_{l-1} > S_r),\end{cases}
\]
注意到比 \(S_r\) 大的 \(S_l\) 会对答案产生 \(M\)的贡献,令 \(X_r=\operatorname{size:}\left\{l=1,2,\dots,r | S_{l-1}>S_r \right\}\) 则原式化为:
\[\sum_{r=1}^N \sum_{l=1}^r (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M = \sum_{r=1}^N \left( S_r \times r - \sum_{l=1}^r S_{l-1} + M \times X_r \right).
\]
很显然 \(x_r\) 是可以通过扫描线求出的,只要维护一个树状数组即可。
F
题意
给你一棵有 \(N\) 个顶点的树。添加一条边可以得到一个基环树,问有多少种添边方案满足:
- 图依然是简单图。
- 循环中所有顶点的度数都是 \(3\)。
分析
不难发现一种添边 \((u,v)\) 方式满足题意当且仅当:
- \(deg_u=deg_v=2\)
- \((u,v)\) 路径上的其他点 \(p\) 都满足 \(deg_p=3\)。
可以记录一个 \(a_u\) 表示与 \(u\) 相连的度数为 \(2\) 的点的数量。先对每个 \(deg=3\) 的点算独立贡献,每新增一个度数为二的点贡献就是当前的 \(a_u\)。再合并不同的三度点,两个集合合并的贡献是 \(a_U \times a_V\),可以用并查集维护。