#P15583. [KTSC 2026] 通信网络 2 / Communication Network 2

[KTSC 2026] 通信网络 2 / Communication Network 2

题目背景

注意:本题你可在附件中获取更多样例。

题目描述

有一张 NN 个点的无向图,其中点编号 0N10\sim N-1。这张图中不会出现自环。起初,这张图中没有边。

给定 TT 个边集 E0,,ET1E_0,\ldots,E_{T-1}。对于 u=0,1,,T1u=0,1,\cdots,T-1,在时刻 u+0.5u+0.5,将 EuE_u 与这张图此时的边集作「异或」(对称差)。换言之,设此时图的边集为 EE,然后对任意 eEue\in E_u

  • eeEE 中,从 EE 中删去 ee
  • 否则,将 ee 添加到 EE 中。

对于非负整数 tt 和两个点 a,ba,b,我们称点 a,ba,b 在时刻 t\boldsymbol{t} 连通,当且仅当时刻 tt 时存在一条连通点 a,ba,b 的路径。特别地,若 a=ba=b,由定义可知上述命题对任意 tt 恒为真。

更进一步地,对于整数 0lrT0\le l\le r\le T 和两个点 a,ba,b,我们称点 a,ba,b 在时段 [l,r]\boldsymbol{[l,r]} 连通,当且仅当点 a,ba,b 在时刻 t=l,l+1,,rt=l,l+1,\ldots,r 时均连通。

QQ 个询问,每个询问给定 x,l,rx,l,r,返回满足点 x,yx,y 在时段 [l,r][l,r] 连通的 yy 的数量(0xN10\le x\le N-10lrT0\le l\le r\le T0yN10\le y\le N-1)。

实现细节

这是一道函数式交互题。你不必,也不应实现 main 函数。

你应当实现以下的函数:

vector<int> count_computers(int N, int T, int Q, vector<vector<array<int, 2>>> E, vector<array<int, 3>> F)
  • EE:存储边集的数组。EE 的大小为 TT。每个 E[i]E[i] 为一个非空的边数组,表示集合 EiE_i。每条边以大小为 22 的数组的形式给出,其中的元素依次为 [a,b][a,b],表示一条连接点 a,ba,b 的边。
  • FF:存储询问的数组。FF 的大小为 QQ。对于任意 0iQ10\le i\le Q-1F[i]F[i] 表示第 ii 次询问。每个询问以大小为 33 的形式给出,其中元素依次为 [x,l,r][x,l,r],其中 xx 为一个点,[l,r][l,r] 为一个时段。
  • 返回一个大小为 QQ 的数组 RR。对于任意 0jQ10\le j\le Q-1R[j]R[j] 表示第 jj 次询问的答案。
  • 该函数被调用恰好一次。

你的源代码中不应调用任何输入/输出函数。

输入格式

示例评测程序的输入格式如下。Ei|E_i| 表示集合 EiE_i 的大小,且 S=0iT1EiS = \sum_{0 \le i \le T-1} |E_i|

  • 11 行:NN TT QQ
  • 对于所有 0iT10 \le i \le T-1
    • 2+0j<i(1+Ej)2 + \sum_{0 \le j < i} (1 + |E_j|) 行:Ei|E_i|
    • 2+0j<i(1+Ej)+k2 + \sum_{0 \le j < i} (1 + |E_j|) + k 行(0k<Ei10 \le k < |E_i| - 1):a ba \ bEiE_i 中第 kk 条边的两个端点)
  • 2+S+T+i2 + S + T + i 行(0iQ10 \le i \le Q - 1):x l rx \ l \ rF[i]F[i] 的每个元素)

输出格式

示例评测程序按以下格式输出答案:

  • 1+i1 + i 行(0iQ10 \le i \le Q - 1):R[i]R[i]
4 5 7
2
0 1
1 2
2
2 3
1 3
2
0 1
0 3
4
0 1
1 2
0 3
2 3
1
1 3
1 1 1
2 2 2
3 3 3
0 0 5
2 1 3
1 1 4
3 2 3

3
4
4
1
3
2
4

提示

数据范围

  • 2N1000002\le N\le 100\, 000
  • 1T1000001\le T\le 100\, 000
  • 1Q2500001\le Q\le 250\, 000
  • EiE_i 是边集,其中边两两不同。
  • S=0i<T1EiS=\sum_{0\le i\lt T-1} |E_i|,则 S100000S\le 100\, 000
  • 对于输入中给出的边 [a,b][a,b],有 0a<bN10\le a\lt b\le N-1
  • 对于输入中给出的查询,有 0xN1,0lrT0\le x\le N-1,0\le l\le r\le T

子任务

编号 得分 限制
11 55 N,S,Q100N,S,Q\le 100
22 1212 N,S,Q5000N,S,Q\le 5\, 000
33 1919 对于所有查询,l=rl=r
44 2323 对于 EE 中给出的所有边 [a,b][a,b]ab=1\vert a-b\vert =1
55 4141 无额外限制

样例

考虑以下调用。

count_computers(4, 5, 7, [[[0, 1], [1, 2]], [[2, 3], [1, 3]], [[0, 1], [0, 3]], [[0, 1], [1, 2], [0, 3], [2, 3]], [[1, 3]], [[1, 1], [2, 2], [3, 3], [0, 0], [0, 5]], [[2, 1, 3], [1, 1, 4], [3, 2, 3]]])

图中有 44 个点。

在每个时刻,图的形态如下:

  • 在时刻 0000 条边。
  • 在时刻 1122 条边:(0,1),(1,2)(0, 1), (1, 2)
  • 在时刻 2244 条边:(0,1),(1,2),(2,3),(1,3)(0, 1), (1, 2), (2, 3), (1, 3)
  • 在时刻 3344 条边:(1,2),(2,3),(1,3),(0,3)(1, 2), (2, 3), (1, 3), (0, 3)
  • 在时刻 4422 条边:(0,1),(1,3)(0, 1), (1, 3)
  • 在时刻 5511 条边:(0,1)(0, 1)

总共给出了 77 个查询:

  • 查询 00:在时刻 11,点 11 与点集 {0,1,2}\{0, 1, 2\} 相连。
  • 查询 11:在时刻 22,点 22 与点集 {0,1,2,3}\{0, 1, 2, 3\} 相连。
  • 查询 22:在时刻 33,点 33 与点集 {0,1,2,3}\{0, 1, 2, 3\} 相连。
  • 查询 33:由于时刻 00 不存在任何边,从时刻 0055,点 00 仅与点 00 相连。
  • 查询 44:从时刻 1133,点 22 与点集 {0,1,2}\{0, 1, 2\} 相连。
  • 查询 55:从时刻 1144,点 11 与点集 {0,1}\{0, 1\} 相连。
  • 查询 66:从时刻 2233,点 33 与点集 {0,1,2,3}\{0, 1, 2, 3\} 相连。

因此,函数应返回 [3,4,4,1,3,2,4][3, 4, 4, 1, 3, 2, 4]

可在附件中获取更多样例。