結果

問題 No.2638 Initial fare
ユーザー ayataka5ayataka5
提出日時 2024-02-19 21:59:56
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 254 ms / 2,000 ms
コード長 1,172 bytes
コンパイル時間 2,303 ms
コンパイル使用メモリ 210,948 KB
実行使用メモリ 34,172 KB
最終ジャッジ日時 2024-02-19 22:00:04
合計ジャッジ時間 7,537 ms
ジャッジサーバーID
(参考情報)
judge15 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,676 KB
testcase_01 AC 2 ms
6,676 KB
testcase_02 AC 2 ms
6,676 KB
testcase_03 AC 3 ms
6,676 KB
testcase_04 AC 187 ms
22,108 KB
testcase_05 AC 195 ms
23,148 KB
testcase_06 AC 2 ms
6,676 KB
testcase_07 AC 177 ms
22,864 KB
testcase_08 AC 151 ms
21,932 KB
testcase_09 AC 176 ms
23,440 KB
testcase_10 AC 154 ms
23,612 KB
testcase_11 AC 2 ms
6,676 KB
testcase_12 AC 175 ms
22,628 KB
testcase_13 AC 141 ms
21,012 KB
testcase_14 AC 162 ms
23,356 KB
testcase_15 AC 167 ms
23,628 KB
testcase_16 AC 2 ms
6,676 KB
testcase_17 AC 197 ms
23,012 KB
testcase_18 AC 155 ms
22,540 KB
testcase_19 AC 178 ms
24,364 KB
testcase_20 AC 185 ms
23,432 KB
testcase_21 AC 196 ms
24,704 KB
testcase_22 AC 2 ms
6,676 KB
testcase_23 AC 225 ms
34,172 KB
testcase_24 AC 254 ms
32,620 KB
testcase_25 AC 2 ms
6,676 KB
testcase_26 AC 218 ms
29,292 KB
testcase_27 AC 231 ms
32,980 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    vector u(N-1, 0), v(N-1, 0);
    for(int i = 0; i < N-1; i++) { cin >> u[i] >> v[i]; u[i]--, v[i]--; }
    vector G(N, vector(0, 0));
    for(int i = 0; i < N-1; i++) { G[u[i]].push_back(v[i]), G[v[i]].push_back(u[i]); }
    vector G0(N, 0LL), G1(N, 0LL), G2(N, 0LL), G3(N, 0LL);
    vector P(N, 0);
    auto dfs = [&](auto f, int v, int p) -> void {
        G0[v]++; P[v] = p;
        for(int nv : G[v]) {
            if(nv == p) continue;
            f(f, nv, v);
            G1[v] += G0[nv];
            G2[v] += G1[nv];
            G3[v] += G2[nv];
        }
    };
    dfs(dfs, 0, -1);
    long long ans(0);
    for(int i = 0; i < N; i++) {
        ans += G3[i];
        ans += G2[i];
        int j(P[i]);
        if(j == -1) { ans += G1[i]; ans += G0[i]; continue; }
        ans += G2[j];
        ans += G1[j];
        int k(P[j]);
        if(k == -1) { ans += G0[j]; continue; }
        ans += G1[k];
        ans += G0[k];
        int l(P[k]);
        if(l == -1) continue;
        ans += G0[l];
    }
    ans = (ans-(long long)N) / 2;
    cout << ans << endl;
    return 0;
}
0