[Ynoi2004] 2stmst

Luogu
IDLGP8336
Time2500ms
Memory512MB
DifficultyP7
2004O2优化Ynoi
已知 $n$ 个顶点的有根树,以及 $m$ 个二元组 $(x_i,y_i)$,其中 $x_i,y_i$ 是树的顶点。 对于树的顶点 $a,b$,定义 $D(a,b)$ 为:在以 $a$ 为根的子树中,但不在以 $b$ 为根的子树中的顶点个数。 你需要求出以这些二元组为顶点的完全图的最小生成树,其中 $(x_i,y_i)$ 和 $(x_j,y_j)$ 之间的边权是 $D(x_i,x_j)+D(x_j,x_i)+D(y_i,y_j)+D(y_j,y_i)$。 ## Input 第一行两个数表示 $n,m$。 之后一行 $n-1$ 个数,其中第 $i$ 个数表示编号为 $i+1$ 的节点的父亲 $f_{i+1}$,保证 $f_{i+1}< i+1$。 之后 $m$ 行,第 $i$ 行两个数 $x_i,y_i$,表示一个给定的二元组。 ## Output 输出一个整数,表示最小生成树的边权和。 [samples] ## Note Idea:nzhtl1477,Solution:ccz181078( $O(m\log n\log m+n\log n)$ ),Rainbow_qwq( $O(m\log n+n)$ ),Code:ccz181078&djq_cpp&Rainbow_qwq,Data:ccz181078 样例解释: 最小生成树包含边 $(1,4,1),(2,3,3),(2,4,3)$,三元组表示第一个二元组的编号,第二个二元组的编号,边权。边权和为 $7$。 数据范围: 对于 $100\%$ 的数据,满足 $1\le n\le 10^6,1\le m\le 10^5$。对任意 $i=1,2,\dots n-1$,满足 $1\le f_{i+1}<i+1$。对任意 $i=1,2,\dots m$,满足 $1\le x_i,y_i\le n$。
Samples
Input #1
5 4
1 2 3 3
3 5
2 2
5 2
2 5
Output #1
7
API Response (JSON)
{
  "problem": {
    "name": "[Ynoi2004] 2stmst",
    "description": {
      "content": "已知 $n$ 个顶点的有根树,以及 $m$ 个二元组 $(x_i,y_i)$,其中 $x_i,y_i$ 是树的顶点。 对于树的顶点 $a,b$,定义 $D(a,b)$ 为:在以 $a$ 为根的子树中,但不在以 $b$ 为根的子树中的顶点个数。 你需要求出以这些二元组为顶点的完全图的最小生成树,其中 $(x_i,y_i)$ 和 $(x_j,y_j)$ 之间的边权是 $D(x_i,x_j)+D(x",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 2500,
      "memory_limit": 524288
    },
    "difficulty": {
      "LuoguStyle": "P7"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP8336"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "已知 $n$ 个顶点的有根树,以及 $m$ 个二元组 $(x_i,y_i)$,其中 $x_i,y_i$ 是树的顶点。\n\n对于树的顶点 $a,b$,定义 $D(a,b)$ 为:在以 $a$ 为根的子树中,但不在以 $b$ 为根的子树中的顶点个数。\n\n你需要求出以这些二元组为顶点的完全图的最小生成树,其中 $(x_i,y_i)$ 和 $(x_j,y_j)$ 之间的边权是 $D(x_i,x_j)+D(x...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments