結果
| 問題 | No.3756 Udon Network |
| ユーザー |
|
| 提出日時 | 2026-09-11 18:45:02 |
| 言語 | Rust (1.97.1 + proconio + num + itertools + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 404 ms / 2,000 ms |
| + 833µs | |
| コード長 | 1,701 bytes |
| 記録 | |
| コンパイル時間 | 3,925 ms |
| コンパイル使用メモリ | 207,996 KB |
| 実行使用メモリ | 58,720 KB |
| 最終ジャッジ日時 | 2026-10-09 17:37:57 |
| 合計ジャッジ時間 | 22,885 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge2_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| Example | 0 % | AC * 8 |
| Subtask $1$ | 2 % | AC * 15 |
| Subtask $2$ | 4 % | AC * 22 |
| Subtask $3$ | 8 % | AC * 9 |
| Subtask $4$ | 16 % | AC * 10 |
| Subtask $5$ | 32 % | AC * 10 |
| Subtask $6$ | 38 % | AC * 53 |
| 合計 | 4 * 100% = 400 点 |
ソースコード
#[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],
}
let mut ans = vec![-1; q];
let mut a = a
.into_iter()
.map(|a| std::iter::once(a).collect::<HashSet<_>>())
.collect::<Box<_>>();
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 mut a1 = std::mem::take(&mut a[u]);
let mut a2 = std::mem::take(&mut a[v]);
let mut b1 = std::mem::take(&mut b[u]);
let mut b2 = std::mem::take(&mut b[v]);
if a1.len() < a2.len() {
std::mem::swap(&mut a1, &mut a2);
}
a1.extend(a2);
if b1.len() < b2.len() {
std::mem::swap(&mut b1, &mut b2);
}
b1.extend(b2);
while let Some(&(c, i)) = b1.peek() {
if !c > a1.len() {
break;
}
b1.pop();
ans[i] = w;
}
a[z] = a1;
b[z] = b1;
}
for x in ans {
println!("{x}");
}
}