結果
| 問題 | No.3756 Udon Network |
| ユーザー |
|
| 提出日時 | 2026-09-11 18:53:33 |
| 言語 | Rust (1.97.1 + proconio + num + itertools + ACL) |
| 結果 |
TLE
不安定
|
| 実行時間 | - |
| コード長 | 1,719 bytes |
| 記録 | |
| コンパイル時間 | 1,215 ms |
| コンパイル使用メモリ | 207,740 KB |
| 実行使用メモリ | 45,084 KB |
| 最終ジャッジ日時 | 2026-10-09 17:38:19 |
| 合計ジャッジ時間 | 8,018 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 点 |
コンパイルメッセージ
warning: variable does not need to be mutable --> src/main.rs:51:13 | 51 | let mut a2 = std::mem::take(&mut a[v]); | ----^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default warning: variable does not need to be mutable --> src/main.rs:53:13 | 53 | let mut b2 = std::mem::take(&mut b[v]); | ----^^ | | | help: remove this `mut`
ソースコード
#[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}");
}
}