제출 #370662

#제출 시각아이디문제언어결과실행 시간메모리
370662Leonardo_Paes철인 이종 경기 (APIO18_duathlon)C++17
0 / 100
1114 ms1048580 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ar array #define sz(a) ((int)(a).size()) #define all(a) (a).begin(),(a).end() typedef pair<int,int> pii; #define f first #define s second const int maxn = 1e5+10; vector<int> grafo[maxn]; int n, m, dp[maxn], sz[maxn], qtd2[maxn]; int solve(int u, int p = 0){ // lca of path is u, 1 as a root int ans = 0; // sum of dps sz[u] = 1; for(int v : grafo[u]){ if(v == p) continue; ans += solve(v, u); sz[u] += sz[v]; qtd2[u] += qtd2[v] + sz[v]; } int qtd = sz[u] - 1; for(int v : grafo[u]){ if(v == p) continue; qtd -= sz[v]; dp[u] += sz[v] * qtd; dp[u] += (sz[u] - sz[v]) * qtd2[v]; } return ans + dp[u]; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n >> m; for(int i=1; i<=m; i++){ int u, v; cin >> u >> v; grafo[u].push_back(v); grafo[v].push_back(u); } cout << 2*solve(1) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...