結果
問題 |
No.1098 LCAs
|
ユーザー |
![]() |
提出日時 | 2021-03-13 01:05:52 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 621 ms / 2,000 ms |
コード長 | 1,441 bytes |
コンパイル時間 | 2,096 ms |
コンパイル使用メモリ | 198,008 KB |
最終ジャッジ日時 | 2025-01-19 16:01:36 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include "bits/stdc++.h" #define MOD 1000000007 #define rep(i, n) for(ll i=0; i < (n); i++) #define rrep(i, n) for(ll i=(n)-1; i >=0; i--) #define ALL(v) v.begin(),v.end() #define rALL(v) v.rbegin(),v.rend() #define FOR(i, j, k) for(ll i=j;i<k;i++) #define debug_print(var) cerr << #var << "=" << var <<endl; #define DUMP(i, v)for(ll i=0;i<v.size();i++)cerr<<v[i]<<" " #define fi first #define se second using namespace std; typedef long long int ll; typedef vector<ll> llvec; typedef vector<double> dvec; typedef pair<ll, ll> P; typedef long double ld; struct edge{ll x, c;}; ll N; vector<llvec> e; llvec a; vector<llvec> v; void dfs(ll from, ll to, ll c){ a.push_back(c); ll old = a.size(); for(auto ie: e[to]){ if(ie==from)continue; dfs(to, ie, c+1); ll n = a.size(); v[to].push_back(n-old); old=n; //a.push_back(c); } return; } /************************************** ** A main function starts from here ** ***************************************/ int main(){ cin >> N; e = vector<llvec>(N); v = vector<llvec>(N); rep(i, N-1){ ll u, w; cin >> u >> w; u--;w--; e[u].push_back(w); e[w].push_back(u); } dfs(-1, 0, 0); rep(i, N){ ll s = 0; for(auto ie: v[i]){ s += ie; } ll ans = 2*s+1; for(auto ie:v[i]){ ans = ans + ie * (s-ie); //cerr << ie << " " << s-ie<<endl; //s-=ie; } cout << ans << endl; } return 0; }