#[allow(unused)] use ac_library::*; #[allow(unused)] use itertools::Itertools; #[allow(unused)] use proconio::{marker::*, *}; #[allow(unused)] use std::collections::*; fn main() { input! { n: usize, m: usize, q: usize, a: [Usize1; n], mut uvw: [(Usize1, Usize1, u32); m], } let mut a = a .into_iter() .map(|a| std::iter::once(a).collect::>()) .collect::>(); let mut h = vec![1; n]; let mut p = vec![0; n]; let mut r = vec![0; n]; let mut d = (0..n).collect::>(); uvw.sort_unstable_by_key(|&(_, _, w)| w); let mut uf = Dsu::new(n); let mut i = n; for (u, v, w) in uvw { let u = uf.leader(u); let v = uf.leader(v); if u == v { continue; } let z = uf.merge(u, v); let mut a1 = std::mem::take(&mut a[u]); let mut a2 = std::mem::take(&mut a[v]); if a1.len() < a2.len() { std::mem::swap(&mut a1, &mut a2); } a1.extend(a2); h.push(a1.len()); p.push(usize::MAX); p[d[u]] = i; p[d[v]] = i; r.push(w); a[z] = a1; d[z] = i; i += 1; } 'a: for _ in 0..q { input! { mut s: Usize1, c: usize, } while h[s] < c { s = p[s]; if s == usize::MAX { println!("-1"); continue 'a; } } println!("{}", r[s]); } }