結果

問題 No.3756 Udon Network
ユーザー Yukkku
提出日時 2026-09-11 19:15:49
言語 Rust
(1.97.1 + proconio + num + itertools + ACL)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
TLE  
実行時間 -
コード長 1,540 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,270 ms
コンパイル使用メモリ 207,816 KB
実行使用メモリ 44,828 KB
最終ジャッジ日時 2026-10-09 17:38:14
合計ジャッジ時間 8,252 ms
ジャッジサーバーID
(参考情報)
judge5_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
Example 0 % AC * 8
Subtask $1$ 2 % AC * 15
Subtask $2$ 4 % AC * 22
Subtask $3$ 8 % AC * 3 TLE * 1 -- * 5
Subtask $4$ 16 % AC * 2 -- * 8
Subtask $5$ 32 % AC * 3 -- * 7
Subtask $6$ 38 % AC * 22 TLE * 1 -- * 30
合計 4 * 6% = 24 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#[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::<HashSet<_>>())
        .collect::<Box<_>>();

    let mut h = vec![1; n];
    let mut p = vec![0; n];
    let mut r = vec![0; n];
    let mut d = (0..n).collect::<Vec<_>>();

    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]);
    }
}
0