結果

問題 No.872 All Tree Path
ユーザー pod1pod1
提出日時 2019-09-06 23:44:46
言語 Rust
(1.77.0 + proconio)
結果
AC  
実行時間 186 ms / 3,000 ms
コード長 1,054 bytes
コンパイル時間 15,072 ms
コンパイル使用メモリ 383,996 KB
実行使用メモリ 41,088 KB
最終ジャッジ日時 2024-06-24 21:36:35
合計ジャッジ時間 16,098 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 159 ms
22,724 KB
testcase_01 AC 162 ms
22,752 KB
testcase_02 AC 161 ms
22,724 KB
testcase_03 AC 89 ms
41,088 KB
testcase_04 AC 1 ms
5,376 KB
testcase_05 AC 186 ms
22,784 KB
testcase_06 AC 173 ms
22,784 KB
testcase_07 AC 168 ms
22,740 KB
testcase_08 AC 10 ms
5,376 KB
testcase_09 AC 10 ms
5,376 KB
testcase_10 AC 10 ms
5,376 KB
testcase_11 AC 10 ms
5,376 KB
testcase_12 AC 10 ms
5,376 KB
testcase_13 AC 1 ms
5,376 KB
testcase_14 AC 1 ms
5,376 KB
testcase_15 AC 1 ms
5,376 KB
testcase_16 AC 1 ms
5,376 KB
testcase_17 AC 1 ms
5,376 KB
testcase_18 AC 1 ms
5,376 KB
testcase_19 AC 1 ms
5,376 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: unused variable: `dist`
  --> src/main.rs:25:7
   |
25 |   let dist = dfs(&g, &mut visit, 0,&mut ans);
   |       ^^^^ help: if this is intentional, prefix it with an underscore: `_dist`
   |
   = note: `#[warn(unused_variables)]` on by default

ソースコード

diff #

use std::vec::Vec;


fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect()
}


fn main() {
  let n: usize = read();
  let mut g: Vec<Vec<(usize, usize)>> = vec![Vec::new(); n];
  for _ in 0..n-1 {
    let t: Vec<usize> = read_vec();
    g[t[0] - 1].push((t[1] - 1, t[2]));
    g[t[1] - 1].push((t[0] - 1, t[2]));
  }
  let mut visit = vec![false; n];
  let mut ans = 0;
  let dist = dfs(&g, &mut visit, 0,&mut ans);
  println!("{}", 2 * ans);
}

fn dfs(g: &Vec<Vec<(usize, usize)>>, visit: &mut Vec<bool>, now: usize, ans: &mut usize) -> usize {
  visit[now] = true;
  let n: usize = g.len();
  let mut res = 0;
  for &(node, cost) in &g[now] {
    if visit[node] { continue; }
    // 子ノードの個数
    let count = dfs(g, visit, node, ans);
    *ans += cost * count * (n - count);
    res += count;
  }

  res + 1
}
0