提出 #12285313
ソースコード 拡げる
// https://atcoder.jp/contests/abc163/submissions/12204917
use proconio::input;
use proconio::marker::Usize1;
// 頂点数 n のときのパスの和を返す (u -> v と v -> u を重複と見なす)
fn f(n: usize) -> usize {
n * (n + 1) / 2
}
// 部分木のサイズを countv に設定する
fn g(countv: &mut Vec<usize>, evv: &Vec<Vec<usize>>, v: usize, p: usize) {
let mut count = 1;
for &u in evv[v].iter() {
if u == p {
continue;
}
g(countv, evv, u, v);
count += countv[u];
}
countv[v] = count;
}
fn h(
av: &mut Vec<usize>,
ccv: &mut Vec<usize>,
cpv: &mut Vec<usize>,
stackv: &mut Vec<Vec<usize>>,
countv: &Vec<usize>,
cv: &Vec<usize>,
evv: &Vec<Vec<usize>>,
v: usize,
p: usize,
) {
let c_v = cv[v];
stackv[c_v].push(v);
for &u in evv[v].iter() {
if u == p {
continue;
}
ccv[v] = countv[u];
h(av, ccv, cpv, stackv, countv, cv, evv, u, v);
av[c_v] -= f(ccv[v]);
}
stackv[c_v].pop();
if let Some(&i_pc) = stackv[c_v].last() {
ccv[i_pc] -= countv[v];
} else {
cpv[c_v] -= countv[v];
}
}
fn main() {
input! {
n: usize,
cv: [Usize1; n],
abv: [(Usize1, Usize1); n - 1],
};
let mut evv = vec![vec![]; n];
for (a, b) in abv {
evv[a].push(b);
evv[b].push(a);
}
let mut countv = vec![0_usize; n];
g(&mut countv, &evv, 0, 0);
let mut av = vec![f(n); n];
let mut ccv = vec![0_usize; n];
let mut cpv = vec![n; n];
let mut stackv = vec![vec![]; n];
h(
&mut av,
&mut ccv,
&mut cpv,
&mut stackv,
&countv,
&cv,
&evv,
0,
0,
);
for (i, &a) in av.iter().enumerate() {
println!("{}", a - f(cpv[i]));
}
}
提出情報
| 提出日時 |
|
| 問題 |
F - path pass i |
| ユーザ |
bouzuya |
| 言語 |
Rust (1.42.0) |
| 得点 |
600 |
| コード長 |
1878 Byte |
| 結果 |
AC |
| 実行時間 |
456 ms |
| メモリ |
61576 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
600 / 600 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt |
| All |
line_01.txt, line_3_01.txt, random_01.txt, random_02.txt, random_03.txt, random_100_01.txt, random_100_02.txt, random_10_01.txt, random_10_02.txt, random_1_01.txt, random_1_02.txt, random_2_01.txt, random_2_02.txt, random_2_03.txt, random_3_01.txt, random_3_02.txt, random_3_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, star_01.txt, star_3_01.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| line_01.txt |
AC |
395 ms |
61576 KiB |
| line_3_01.txt |
AC |
350 ms |
59484 KiB |
| random_01.txt |
AC |
438 ms |
34200 KiB |
| random_02.txt |
AC |
456 ms |
34140 KiB |
| random_03.txt |
AC |
439 ms |
34388 KiB |
| random_100_01.txt |
AC |
392 ms |
29728 KiB |
| random_100_02.txt |
AC |
394 ms |
29756 KiB |
| random_10_01.txt |
AC |
389 ms |
29560 KiB |
| random_10_02.txt |
AC |
391 ms |
29632 KiB |
| random_1_01.txt |
AC |
389 ms |
29696 KiB |
| random_1_02.txt |
AC |
394 ms |
29564 KiB |
| random_2_01.txt |
AC |
396 ms |
29324 KiB |
| random_2_02.txt |
AC |
390 ms |
29588 KiB |
| random_2_03.txt |
AC |
396 ms |
29588 KiB |
| random_3_01.txt |
AC |
388 ms |
29556 KiB |
| random_3_02.txt |
AC |
390 ms |
29552 KiB |
| random_3_03.txt |
AC |
399 ms |
29616 KiB |
| sample_01.txt |
AC |
2 ms |
2068 KiB |
| sample_02.txt |
AC |
1 ms |
1976 KiB |
| sample_03.txt |
AC |
1 ms |
2164 KiB |
| sample_04.txt |
AC |
1 ms |
2112 KiB |
| sample_05.txt |
AC |
2 ms |
2136 KiB |
| star_01.txt |
AC |
347 ms |
32624 KiB |
| star_3_01.txt |
AC |
321 ms |
27692 KiB |