제출 #1342518

#제출 시각아이디문제언어결과실행 시간메모리
1342518goats_9철인 이종 경기 (APIO18_duathlon)C++20
100 / 100
65 ms30992 KiB
/* Author: goats_9 */

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> g(n), t(n);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		g[--u].push_back(--v);
		g[v].push_back(u);
	}
	vector<int> s, num(n, -1), low(n, -1), id(n), dp(2 * n);
	int timer = 0, cnt = n, c = 0;
	auto dfs = [&] (auto&& self, int u, int p) -> void {
		num[u] = low[u] = timer++;
		s.push_back(u);
		c++;
		for (int v : g[u]) {
			if (v == p) continue;
			if (num[v] == -1) {
				self(self, v, u);
				low[u] = min(low[u], low[v]);
				if (num[u] <= low[v]) {
					vector<int> comp{};
					while (comp.empty() || comp.back() != v) {
						comp.push_back(s.back());
						s.pop_back();
					}
					t[u].push_back(cnt);
					t.push_back(comp);
					cnt++;
				}
			} else low[u] = min(low[u], num[v]);
		}
	};
	ll ans = 0;
	auto efs = [&] (auto&& self, int u, int p) -> void {
		dp[u] = u < n;
		for (int v : t[u]) {
			if (v == p) continue;
			self(self, v, u);
			dp[u] += dp[v];
			if (u >= n) ans -= t[u].size() * dp[v] * (dp[v] - 1);
		}
		if (u >= n) ans -= t[u].size() * (c - dp[u]) * (c - dp[u] - 1);
	};
	for (int i = 0; i < n; i++) {
		if (num[i] != -1) continue;
		c = 0;
		dfs(dfs, i, -1);
		ans += 1LL * c * (c - 1) * (c - 2);
		efs(efs, i, -1);
	}
	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...