제출 #569112

#제출 시각아이디문제언어결과실행 시간메모리
569112SSRS철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
1115 ms386812 KiB
#include <bits/stdc++.h> using namespace std; int main(){ int n, m; cin >> n >> m; vector<vector<int>> E(n); for (int i = 0; i < m; i++){ int u, v; cin >> u >> v; u--; v--; E[u].push_back(v); E[v].push_back(u); } vector<int> p(n, -1); vector<vector<int>> c(n); vector<int> r(n); vector<int> bfs; for (int i = 0; i < n; i++){ if (p[i] == -1){ queue<int> Q; Q.push(i); while (!Q.empty()){ int v = Q.front(); Q.pop(); bfs.push_back(v); r[v] = i; for (int w : E[v]){ if (w != p[v]){ p[w] = v; c[v].push_back(w); Q.push(w); } } } } } reverse(bfs.begin(), bfs.end()); vector<int> dp(n, 1); for (int v : bfs){ for (int w : c[v]){ dp[v] += dp[w]; } } long long ans = 0; for (int v = 0; v < n; v++){ ans += (long long) (dp[r[v]] - 1) * (dp[r[v]] - 2); for (int w : c[v]){ ans -= (long long) dp[w] * (dp[w] - 1); } ans -= (long long) (dp[r[v]] - dp[v]) * (dp[r[v]] - dp[v] - 1); } cout << ans << endl; }
#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...