結果
| 問題 |
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;
}
onsen_manjuuu