#P17649. [IO 2025 #1] 骷髅、骨头、墓地、头骨

[IO 2025 #1] 骷髅、骨头、墓地、头骨

题目描述

法鲁姆(Farloom)是一个遍布丝线小径的王国。每条小径都是连接两个村庄的一根绷紧的直丝线。狡猾的反派“头骨暴君”打算沿竖直方向挥击这张由小径组成的网。

把王国看成一张图:顶点是村庄,第 ii 个村庄在平面上的坐标为 (xi,yi)(x_i,y_i);边是连接村庄的丝线小径。表示道路的线段可以在村庄之外相交,但不能在这些交点处从一条道路转到另一条道路。

王国居民猜测了 qq 个暴君可能攻击的位置。如果暴君沿横坐标为 XX 的竖直直线攻击,将删除:

  • 所有满足 xi=Xx_i=X 的村庄;
  • 所有连接村庄 i,ji,j 且满足 min⁡(xi,xj)≤X≤max⁡(xi,xj)\min(x_i,x_j)\le X\le\max(x_i,x_j) 的道路。

请帮助居民,对每个可能的攻击位置,求攻击后王国中剩余的连通分量数。所有询问相互独立:回答当前询问时,不需要考虑之前的攻击。

图的连通分量是一个顶点集合,集合中的任意顶点都可以沿边到达集合内的其他任意顶点,但不能沿边到达集合之外的顶点。

输入格式

每个测试包含多组数据。第一行包含整数 tt,表示数据组数,满足 1≤t≤50001\le t\le5000。接下来依次描述每组数据。

每组数据的第一行包含三个整数 n,m,qn,m,q,分别表示村庄数、道路数和可能的攻击位置数,满足 1≤n≤1051\le n\le10^5,0≤m≤min⁡(105,n(n−1)2)0\le m\le\min(10^5,\frac{n(n-1)}2),1≤q≤1051\le q\le10^5。

第二行包含 nn 个整数 xix_i,表示各村庄的横坐标。第三行包含 nn 个整数 yiy_i,表示各村庄的纵坐标。坐标范围为 −109≤xi,yi≤109-10^9\le x_i,y_i\le10^9。

接下来 mm 行,每行包含两个整数 ui,viu_i,v_i,表示道路连接的两个村庄编号,满足 1≤ui,vi≤n1\le u_i,v_i\le n,且 ui≠viu_i\ne v_i。

最后一行包含 qq 个整数,表示各个可能攻击位置的横坐标,每个数的绝对值都不超过 10910^9。

保证同一组数据中,没有两个村庄的坐标相同。保证所有数据组的 nn 之和、mm 之和、qq 之和分别都不超过 10510^5。

输出格式

对每组数据,输出一行 qq 个整数,分别表示各询问的答案。

注意,各询问相互独立。

2
9 9 6
0 0 0 1 1 2 2 2 3
0 2 -2 1 -1 0 2 -2 0
1 4
1 5
2 4
3 5
4 6
4 7
5 6
5 8
6 9
-1 0 1 2 3 10
5 3 4
-1 0 1 3 3
0 0 0 1 -1
1 2
2 3
4 5
0 1 2 3
1 1 6 2 1 1
3 2 2 1

提示

样例中的图如下所示:

:::align{center} :::