結果

問題 No.3756 Udon Network
ユーザー Yukkku
提出日時 2026-09-11 19:31:39
言語 Rust
(1.97.1 + proconio + num + itertools + ACL)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
RE  
実行時間 -
コード長 1,453 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 945 ms
コンパイル使用メモリ 196,168 KB
実行使用メモリ 31,356 KB
最終ジャッジ日時 2026-10-09 17:39:41
合計ジャッジ時間 18,836 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
Example 0 % AC * 4 RE * 4
Subtask $1$ 2 % AC * 5 RE * 10
Subtask $2$ 4 % AC * 5 RE * 17
Subtask $3$ 8 % AC * 2 RE * 7
Subtask $4$ 16 % AC * 2 RE * 8
Subtask $5$ 32 % AC * 9 TLE * 1
Subtask $6$ 38 % AC * 11 RE * 41 TLE * 1
合計 4 * 0% = 0 点
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: variable does not need to be mutable
  --> src/main.rs:49:13
   |
49 |         let mut b2 = std::mem::take(&mut b[v]);
   |             ----^^
   |             |
   |             help: remove this `mut`
   |
   = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default

ソースコード

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, i32); m],
    }
    if a.iter().enumerate().any(|(i, &a)| a != i) {
        panic!()
    }

    let mut ans = vec![-1; q];
    let mut b = std::iter::repeat_n(BinaryHeap::new(), n).collect::<Box<_>>();
    for i in 0..q {
        input! {
            s: Usize1,
            c: usize,
        }
        if c == 1 {
            ans[i] = 0;
        } else {
            b[s].push((!c, i));
        }
    }

    uvw.sort_unstable_by_key(|&(_, _, w)| w);
    let mut uf = Dsu::new(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 size = uf.size(z);

        let mut b1 = std::mem::take(&mut b[u]);
        let mut b2 = std::mem::take(&mut b[v]);
        // if b1.len() < b2.len() {
        //     std::mem::swap(&mut b1, &mut b2);
        // }
        b1.extend(b2);
        while let Some(&(c, i)) = b1.peek() {
            if !c > size {
                break;
            }
            b1.pop();
            ans[i] = w;
        }

        b[z] = b1;
    }

    for x in ans {
        println!("{x}");
    }
}
0