Submission #698687

#TimeUsernameProblemLanguageResultExecution timeMemory
698687vjudge1Duathlon (APIO18_duathlon)C++17
0 / 100
75 ms15520 KiB
#include "bits/stdc++.h" #define ll long long using namespace std; const ll mod = 1000000007; vector<int> v[100001]; int d[100001], par[1000001], child[100001]; ll pp[100001]; set<pair<int, int>> s; void dfs(int x) { bool yes = 1; for(int i : v[x]) { if(!par[i]) { child[x]++; par[i] = x; d[i] = d[x] + 1; dfs(i); yes = 0; } } if(yes) s.insert({-d[x], x}); pp[x] = 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(!par[i]) { par[i] = i; dfs(i); } } ll ans = 0; while(s.size()) { pair<int, int> p = *s.begin(); s.erase(s.begin()); int x = p.second; if(par[x] != x) { child[par[x]]--; pp[par[x]] += pp[x]; ans += (pp[x] * (pp[x] - 1)); if(!child[par[x]]) s.insert({-d[par[x]], par[x]}); } // cout << x << " " << pp[x] << " " << ans << "\n"; } 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...