[集训队互测 2022] 树链剖分

Luogu
IDLGP8821
Time4000ms
Memory1024MB
DifficultyP6
集训队互测2022O2优化
给定一棵 $n$ 个节点的树 $T$ 以及树上的 $m$ 条 **不同的** 路径 $I_i = (u_i, v_i)(u_i\neq v_i)$。具体地,$I_i$ 表示树上 $u_i$ 和 $v_i$ 之间的简单路径上所有点形成的点集。 考虑 $T$ 上某条路径 $I = (u, v)$,定义 $f(I) = \sum\limits_{i = 1} ^ m\sum\limits_{j = 1} ^ m [I_i\cup I = I_j\cup I]$。 对于 $T$ 上所有不同路径 $I$,求 $f(I)$ 之和,并将答案对 $998244353$ 取模。也就是说,你需要求 $\left(\sum\limits_{u = 1} ^ n\sum\limits_{v = u} ^ n f((u, v))\right) \bmod 998244353$。 ## Input 第一行一个整数 $S$,表示子任务编号。样例的子任务编号为 $-1$。 第二行两个整数 $n, m$,分别表示树的大小和路径条数。 接下来 $n - 1$ 行,每行两个整数 $x_i, y_i$ 表示 $T$ 上的一条边。 接下来 $m$ 行,每行两个整数 $u_i, v_i$ 表示第 $i$ 条路径 $I_i$。 **保证给定路径两两不同**。 ## Output 输出一行一个整数表示答案。 [samples] ## Background 请注意:**本题不是树链剖分模板题**。 ## Note 本题采用捆绑测试,共 $25$ 个子任务,分别编号为 $0\sim 24$。**注意评测子任务编号为实际子任务编号 $+1$**。 子任务编号模 $5$ 的余数将子任务按数据大小划分。 - 若子任务编号模 $5$ 余 $0$,则 $n, m\leq 100$,记为 A1。 - 若子任务编号模 $5$ 余 $1$,则 $n, m\leq 500$,记为 B1。依赖于 A1。 - 若子任务编号模 $5$ 余 $2$,则 $n, m\leq 1557$,记为 C1。依赖于 B1。 - 若子任务编号模 $5$ 余 $3$,则 $n, m\leq 85500$,记为 D1。依赖于 C1。 - 若子任务编号模 $5$ 余 $4$,则 $n, m\leq 2\times 10 ^ 5$,记为 E1。依赖于 D1。 子任务编号除以 $5$ 的商将子任务按特殊限制划分。 - 若子任务编号除以 $5$ 商 $0$,则 $T$ 是一条链,记为 A2。 - 若子任务编号除以 $5$ 商 $1$,则 $T$ 是一个菊花,记为 B2。 - 若子任务编号除以 $5$ 商 $2$,则所有路径端点互不相同,记为 C2。 - 若子任务编号除以 $5$ 商 $3$,则所有路径以同一点为一端,记为 D2。 - 若子任务编号除以 $5$ 商 $4$,则无特殊限制,记为 E2。依赖于 A2,B2,C2,D2。 对于 $100\%$ 的数据,$2\leq n\leq 2\times 10 ^ 5$,$1\leq m\leq \min(\frac {n(n - 1)} 2, 2\times 10 ^ 5)$,$1\leq u_i, v_i, x_i, y_i\leq n$,且所有 $(x_i, y_i)$ 形成一棵树,所有 $I_i = (u_i, v_i)$ 互不相同,$u_i\neq v_i$。 各子任务分值如下表所示。 | **得分** | **A1** | **B1** | **C1** | **D1** | **E1** | **总和** | | :------: | :----: | :----: | :----: | :----: | :----: | :------: | | **A2** | $1$ | $2$ | $3$ | $7$ | $7$ | $20$ | | **B2** | $1$ | $2$ | $3$ | $4$ | $4$ | $14$ | | **C2** | $1$ | $2$ | $5$ | $7$ | $7$ | $22$ | | **D2** | $1$ | $3$ | $5$ | $4$ | $5$ | $18$ | | **E2** | $2$ | $3$ | $3$ | $9$ | $9$ | $26$ | | **总和** | $6$ | $12$ | $19$ | $31$ | $32$ | $100$ | **注:洛谷评测无子任务依赖**。 来源:2022 年集训队互测 Round 4。 出题人:Alex_Wei。
Samples
Input #1
-1
3 3
1 2
2 3
1 2
2 3
1 3
Output #1
32
Input #2
-1
4 6
1 2
1 3
1 4
1 2
1 3
1 4
2 3
2 4
3 4
Output #2
120
Input #3
-1
7 7
1 2
1 3
2 4
4 5
5 6
5 7
5 7
3 1
4 7
7 1
2 6
3 6
3 5
Output #3
330
API Response (JSON)
{
  "problem": {
    "name": "[集训队互测 2022] 树链剖分",
    "description": {
      "content": "给定一棵 $n$ 个节点的树 $T$ 以及树上的 $m$ 条 **不同的** 路径 $I_i = (u_i, v_i)(u_i\\neq v_i)$。具体地,$I_i$ 表示树上 $u_i$ 和 $v_i$ 之间的简单路径上所有点形成的点集。 考虑 $T$ 上某条路径 $I = (u, v)$,定义 $f(I) = \\sum\\limits_{i = 1} ^ m\\sum\\limits_{j = 1",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 4000,
      "memory_limit": 1048576
    },
    "difficulty": {
      "LuoguStyle": "P6"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP8821"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "给定一棵 $n$ 个节点的树 $T$ 以及树上的 $m$ 条 **不同的** 路径 $I_i = (u_i, v_i)(u_i\\neq v_i)$。具体地,$I_i$ 表示树上 $u_i$ 和 $v_i$ 之间的简单路径上所有点形成的点集。\n\n考虑 $T$ 上某条路径 $I = (u, v)$,定义 $f(I) = \\sum\\limits_{i = 1} ^ m\\sum\\limits_{j = 1...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments