import sys from typing import List def parse_input(): n, m, q = map(int, sys.stdin.readline().strip().split()) edges = [ list(map(int, sys.stdin.readline().strip().split())) for _ in range(m) ] colors = [ list(map(int, sys.stdin.readline().strip().split())) for _ in range(q) ] return n, edges, colors class Solution: def __init__(self, n, edges) -> None: self.node_color: List[int] = [0] * n self.neighbors = self._build_neighbors(n, edges) self.max = 0 def _build_neighbors(self, n, edges) -> List[List[int]]: neighbors = [[] for _ in range(n)] for u, v in edges: u, v = u - 1, v - 1 neighbors[u].append(v) neighbors[v].append(u) return neighbors def resolve(self, turn_color) -> int: x, c = turn_color[0] - 1, turn_color[1] self.node_color[x] = c visited = set() def dfs(i) -> int: if self.node_color[i] != c: return 0 visited.add(i) return 1 + sum(dfs(j) for j in self.neighbors[i] if j not in visited) candidate_max = dfs(x) self.max = max(self.max, candidate_max) return self.max # Solution维护ans,在每次染色后更新 # 初始时每个节点只和自己连通 # 如何将连通的所有节点映射到一个值?先用dfs实现吧 # node_color: list, not_visited: set # 根据edges和colors,构建每个节点和自己颜色相同的邻居节点 # 从每个节点出发,通过dfs统计连通节点数,更新ans if __name__ == "__main__": n, edges, colors = parse_input() solution = Solution(n, edges) for color in colors: ans = solution.resolve(color) print(ans)