結果
| 問題 |
No.2638 Initial fare
|
| コンテスト | |
| ユーザー |
yuyu_5510
|
| 提出日時 | 2024-02-19 22:05:54 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,285 bytes |
| コンパイル時間 | 1,773 ms |
| コンパイル使用メモリ | 172,860 KB |
| 実行使用メモリ | 33,964 KB |
| 最終ジャッジ日時 | 2024-09-29 02:02:07 |
| 合計ジャッジ時間 | 7,193 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 6 WA * 19 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
void dfs(int v, int pre, vector<vector<int>>& g, vector<long long>& ch, long long &ans){
for(auto nv : g[v]){
if(nv == pre) continue;
dfs(nv, v, g, ch, ans);
ch[v] += ch[nv];
}
}
void dfs2(int v, int pre, vector<vector<int>>& g, vector<long long>& ch, long long &ans){
for(auto nv : g[v]){
if(nv == pre) continue;
dfs2(nv, v, g, ch, ans);
}
long long sum = 0;
for(auto nv : g[v]){
if(nv == pre) continue;
sum += ch[nv] - 1;
}
long long n = (long long)(g.size());
if(pre != -1){
sum += n - ch[v] - 1;
}
long long minus = 0;
for(auto nv : g[v]){
if(nv == pre) continue;
minus += (sum - ch[nv] + 1) * (ch[nv] - 1);
}
if(pre != -1){
minus += (sum - (n - ch[v] - 1)) * (n - ch[v] - 1);
}
ans -= minus / 2;
}
int main(){
long long n;
cin >> n;
vector<vector<int>> g(n);
for(int i = 0;i < n-1;i++){
int u, v;
cin >> u >> v;
u--;v--;
g[u].push_back(v);
g[v].push_back(u);
}
long long ans = n*(n-1) / 2;
vector<long long> ch(n, 1);
dfs(0, -1, g, ch, ans);
dfs2(0, -1, g, ch, ans);
cout << ans << endl;
}
yuyu_5510