颜色团
题号:NC285969
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

给定一张 n 个结点 m 条边的简单无向图,结点从 1n 编号,每个结点都有一个颜色。

我们可以说这个图是由若干个【团】组成的,若点 a 和点 b 在同一个团里,当且仅当存在一条从 a 到达 b 的路径,且这条路径上所有的点(包括点 b)与点 a 同色。

小灰灰接下来会进行 q 次操作,每次操作会给定两个整数 xc,代表将 x 以及所有和 x 处在同一个团里的点颜色都修改为 c

小蓝需要在小灰灰每次操作之后回答当前的图中有多少个团,你能帮帮小蓝吗?

输入描述:

第一行给定三个空格分隔的整数,分别代表 n,m,q

接下来一行 n 个空格分隔的整数,第 i 个数代表编号为 i 的结点的颜色;

接下来 m 行,每行两个空格分隔的整数 u,v,代表结点 u 和结点 v 之间存在一条连边;

接下来 q 行,每行两个空格分隔的整数 x,c,代表小灰灰操作了结点 x 所在的团,将颜色转变成了 c

保证:
图中不存在重边和自环。
1\le n \le 10^5
1\le m \le 1.6 \times 10^5
1\le q \le 10^5
颜色取值以及操作输入和连边结点编号都是不超过 n 的正整数;

输出描述:

输出共 q 行,第 i 行一个数代表小灰灰操作 i 次后图中所具有的团的数量。
示例1

输入

复制
5 6 4
1 3 2 1 1
1 5
2 5
1 2
2 4
1 3
3 4
2 3
2 2
4 2
4 1

输出

复制
4
4
2
1

备注:

提示:
请注意本题的空间和时间限制。
不建议定义过多的 STL 容器,容易导致空间和时间超限。