結果
| 問題 | No.1103 Directed Length Sum | 
| コンテスト | |
| ユーザー |  onsen_manjuuu | 
| 提出日時 | 2020-07-05 16:19:08 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 1,069 ms / 3,000 ms | 
| コード長 | 816 bytes | 
| コンパイル時間 | 1,744 ms | 
| コンパイル使用メモリ | 175,312 KB | 
| 実行使用メモリ | 136,068 KB | 
| 最終ジャッジ日時 | 2024-09-22 13:45:30 | 
| 合計ジャッジ時間 | 12,049 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 22 | 
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
ll n, root;
vector<vector<ll>> hen;
vector<ll> dp;
pair<ll,ll> dfs(ll v, ll par) {
    ll sum = 0;
    ll cnt = 1;
    for(auto i : hen[v]) {
        pair<ll,ll> cur = dfs(i, v);
        sum += (cur.first + cur.second);
        cnt += cur.second;
        sum %= mod;
    }
    dp[v] = sum;
    return {sum, cnt};
}
int main()
{
    cin >> n;
    hen.resize(n), dp.resize(n);
    vector<ll> fin(n);
    for(ll i = 0; i < n - 1; i++) {
        ll a, b; cin >> a >> b; a--, b--;
        hen[a].emplace_back(b);
        fin[b]++;
    }
    root = find(fin.begin(), fin.end(), 0) - fin.begin();
    
    dfs(root, -1);
    cout << accumulate(dp.begin(), dp.end(),0LL, [](ll a, ll b){return (a + b) % mod;}) << endl;
}
            
            
            
        