제출 #405082

#제출 시각아이디문제언어결과실행 시간메모리
405082BERNARB01철인 이종 경기 (APIO18_duathlon)C++17
23 / 100
1121 ms1048580 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> g(n);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		--u; --v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	vector<long long> sbt(n, 0);
	long long ans = 0;
	function<void(int, int)> dfs0 = [&](int u, int p) {
		sbt[u] = 1;
		for (int v : g[u]) {
			if (v != p) {
				dfs0(v, u);
				sbt[u] += sbt[v];
			}
		}
	};
	function<void(int, int, int)> DFS = [&](int u, int p, int nn) {
		for (int v : g[u]) {
			if (v != p) {
				DFS(v, u, nn);
			}
		}
		long long sum = nn - 1;
		long long sbtp = nn - sbt[u];
		ans += sbtp * 1LL * (sum - sbtp);
		for (int v : g[u]) {
			if (v != p) {
				ans += sbt[v] * 1LL * (sum - sbt[v]);
			}
		}
	};
	for (int i = 0; i < n; i++) {
		if (sbt[i] == 0) {
			dfs0(i, -1);
			DFS(i, -1, sbt[i]);
		}
	}
	cout << ans << '\n';
	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...