#NOIP260304. 相互选择

相互选择

相互选择

时间限制:44 秒。内存限制:512512 MB。

题目描述

给定一棵有 nn 个顶点的树,顶点编号为 1,2,…,n1,2,\ldots,n。顶点 ii 的分数为 pip_i,其中 p1,p2,…,pnp_1,p_2,\ldots,p_n 是 1,2,…,n1,2,\ldots,n 的一个排列。每个顶点都选择与它直接相连的顶点中分数最小的一个。

依次进行 qq 次交换。每次给出两个顶点 u,vu,v,交换它们的分数 pu,pvp_u,p_v。

每次交换后,所有顶点按当前分数重新选择。求有多少对顶点 {x,y}\{x,y\},满足 xx 选择 yy,并且 yy 也选择 xx。每对顶点只计数一次。

每次交换立即生效,后续交换使用当前分数。

输入格式

输入文件:choice.in。

第一行包含两个整数 n,qn,q。

第二行包含 nn 个整数 p1,p2,…,pnp_1,p_2,\ldots,p_n。

接下来 n−1n-1 行,每行包含两个整数 u,vu,v,表示树的一条边。

接下来 qq 行,每行包含两个整数 u,vu,v,表示交换这两个顶点的分数。

输出格式

输出文件:choice.out。

对每次交换,输出一行一个整数,表示交换后互相选择的顶点对数。

样例

输入:

4 4
1 4 3 2
1 2
2 3
3 4
1 3
2 4
1 3
2 4

输出:

1
1
1
2

样例解释

前三次交换后,互相选择的顶点对依次为 {3,4}\{3,4\}、{2,3}\{2,3\}、{1,2}\{1,2\}。第四次交换后,{1,2}\{1,2\} 与 {3,4}\{3,4\} 都互相选择,答案为 22。

附加样例 choice2.in/.ans\texttt{choice2.in/.ans}、choice3.in/.ans\texttt{choice3.in/.ans}、choice4.in/.ans\texttt{choice4.in/.ans}、choice5.in/.ans\texttt{choice5.in/.ans} 分别满足测试点 3∼53\sim5、66、7∼87\sim8、15∼2015\sim20 的限制。

数据范围

测试点编号 n≤n\le q≤q\le 特殊性质
1—2 500500 无
3—5 50005000
6 10610^6 AA
7—8 2×1052\times10^5 BB
9 5×1045\times10^4 无
10 10510^5
11—12 2×1052\times10^5
13—14 5×1055\times10^5
15—20 10610^6

对于所有测试点,2≤n≤1062\le n\le10^6,1≤q≤1061\le q\le10^6,1≤u,v≤n1\le u,v\le n。保证给出的图是一棵树,p1,p2,…,pnp_1,p_2,\ldots,p_n 是 1,2,…,n1,2,\ldots,n 的一个排列。

特殊性质 AA:每个顶点的度数均不超过 2。

特殊性质 BB:每次交换的两个顶点在原树中的度数均不超过 10。