제출 #111864

#제출 시각아이디문제언어결과실행 시간메모리
111864square1001철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
1139 ms1049600 KiB
#include <vector> #include <iostream> #include <algorithm> #include <functional> using namespace std; int main() { int N, M; cin >> N >> M; vector<vector<int> > G(N); for(int i = 0; i < M; ++i) { int a, b; cin >> a >> b; --a, --b; G[a].push_back(b); G[b].push_back(a); } vector<int> C(N), P(N), R(N); function<void(int, int, int)> dfs = [&](int pos, int pre, int root) { P[pos] = pre; C[pos] = 1; R[pos] = root; for(int i : G[pos]) { if(i == pre) continue; dfs(i, pos, root); C[pos] += C[i]; } }; for(int i = 0; i < N; ++i) { if(C[i] == 0) { dfs(i, -1, i); } } long long ans = 0; for(int i = 0; i < N; ++i) { int rem = C[R[i]] - 1; long long sum = 1LL * rem * (rem - 1); for(int j : G[i]) { if(j == P[i]) continue; rem -= C[j]; sum -= 1LL * C[j] * (C[j] - 1); } sum -= 1LL * rem * (rem - 1); ans += sum; } cout << ans << endl; 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...