クエリ問題で,一つのクエリにつき高速に求める. 良いグラフの定義通りだと,全ての\(i \in K\)に対して調べることになるが, クエリでは1本しか辺を追加しないので,変化は少ない. クエリ毎に共通して使える部分が多くあるので,そこを前処理しておく.
良いグラフか判定する際,連結成分毎に考えれば良い. 各連結成分ごとに\(x_{i}, y_{i}\)が含まれているかが重要で, それ以外はグラフの形は影響しない.
クエリで調べたいことは,異なる連結成分2つが与えられたとき, それを結んで良いかどうか.これを前処理する.
あとは\(O(N), O(Nlog N)\)(または\(N\)を\(M,K\)に変えたもの)など,高速で前処理を済ませたい. 連結成分の個数は,最大で\(O(N)\)になる. 結んではいけない連結成分の組をもとめておけば, \(O(Klog K)\)で前処理できる. クエリごとにも\(O(log K)\)でできるので, 合計で \(O*1;