Submission #698664

#TimeUsernameProblemLanguageResultExecution timeMemory
698664vjudge1Duathlon (APIO18_duathlon)C++17
10 / 100
1088 ms1048576 KiB
#include "bits/stdc++.h" #define ll long long using namespace std; const ll mod = 1000000007; vector<int> v[100001]; int anc[100001][20], d[100001]; int logg = 20; void dfs(int x, int par) { for(int i : v[x]) { if(i != par) { anc[i][0] = x; d[i] = d[x] + 1; dfs(i, x); } } } int get_lca(int a, int b) { if(d[a] < d[b]) swap(a, b); int dif = d[a] - d[b]; for(int i = 0; i < logg; i++) { if(dif & (1 << i)) a = anc[a][i]; } if(a == b) return a; for(int i = logg - 1; i >= 0; i--) { if(anc[a][i] != anc[b][i]) { a = anc[a][i]; b = anc[b][i]; } } if(anc[a][0] == anc[b][0]) return anc[a][0]; return -1; } signed main () { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("cowland.in","r",stdin); // freopen("cowland.out","w",stdout); int n, m; cin >> n >> m; for(int i = 0; i < m; i++) { int a, b; cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } for(int i = 1; i <= n; i++) { if(!anc[i][0]) { anc[i][0] = i; dfs(i, 0); } } for(int j = 1; j < logg; j++) { for(int i = 1; i <= n; i++) anc[i][j] = anc[anc[i][j - 1]][j - 1]; } ll ans = 0; for(int i = 1; i <= n; i++) { for(int j = i + 1; j <= n; j++) { int lca = get_lca(i, j); if(lca == -1) continue; ll dis = (d[i] + d[j]) - (d[lca] * 2); ans += ((dis - 1) * 2LL); } } cout << ans; 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...