제출 #1113436

#제출 시각아이디문제언어결과실행 시간메모리
1113436adaawf철인 이종 경기 (APIO18_duathlon)C++17
0 / 100
72 ms20872 KiB
#include <iostream> #include <vector> using namespace std; pair<int, int> e[200005]; vector<pair<int, int>> g[100005]; long long int dd[100005], a[100005], b[100005], tin[100005], f[100005], s[100005], z = 0; vector<int> gg[100005], v; void dfs(int x, int p) { tin[x] = f[x] = ++z; for (auto w : g[x]) { if (w.first == p) continue; if (tin[w.first]) { f[x] = min(f[x], tin[w.first]); } else { dfs(w.first, x); f[x] = min(f[x], f[w.first]); if (tin[x] < f[w.first]) { dd[w.second] = 1; } } } } void dfs2(int x, int h) { b[x] = h; a[h]++; for (auto w : g[x]) { if (b[w.first] || dd[w.second]) continue; dfs2(w.first, h); } } long long int res = 0, d = 0; void dfs3(int x, int p) { v.push_back(x); s[x] = a[x]; d += a[x]; tin[x] = 1; long long int h = 0; for (int w : gg[x]) { if (w == p) continue; dfs3(w, x); s[x] += s[w]; } } void dfs4(int x, int p) { long long int h = 0; for (int w : gg[x]) { long long int k; if (w == p) { k = d - s[x]; } else { dfs4(w, x); k = s[w]; } res += h * k; h += k; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; e[i] = {u, v}; g[u].push_back({v, i}); g[v].push_back({u, i}); } for (int i = 1; i <= n; i++) { if (tin[i] == 0) { dfs(i, -1); } } z = 0; for (int i = 1; i <= n; i++) { if (b[i] == 0) { z++; dfs2(i, z); } } for (int i = 1; i <= m; i++) { if (dd[i] == 1) { gg[b[e[i].first]].push_back(b[e[i].second]); gg[b[e[i].second]].push_back(b[e[i].first]); } } for (int i = 1; i <= z; i++) tin[i] = 0; for (int i = 1; i <= z; i++) { if (tin[i] == 0) { v.clear(); d = 0; dfs3(i, -1); dfs4(i, -1); for (int w : v) { //cout << w << " " << a[w] << " " << s[w] << '\n'; res += (a[w] - 1) * a[w] * a[w] / 2; res += d - a[w]; res += (a[w] - 1) * a[w] * (d - a[w]); } } } cout << (res - n * (n - 1)) * 2; }

컴파일 시 표준 에러 (stderr) 메시지

count_triplets.cpp: In function 'void dfs3(int, int)':
count_triplets.cpp:38:19: warning: unused variable 'h' [-Wunused-variable]
   38 |     long long int h = 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...