Submission #405467

#TimeUsernameProblemLanguageResultExecution timeMemory
405467salehDuathlon (APIO18_duathlon)C++17
23 / 100
1111 ms1048580 KiB
#include <bits/stdc++.h>

#define int long long

using namespace std;


const int MAXN = 100 * 1000 + 23;















int n, m, sz[MAXN], save, ans;
vector<int> g[MAXN];
bitset<MAXN> mark;

int ent(int x) { return x * (x - 1); }
int gs(int v, int p) {
	mark[v] = true;
	for (auto i : g[v]) if (i != p) sz[v] += gs(i, v);
	return ++sz[v];
}
void dfs(int v, int p) {
	for (auto i : g[v]) if (i != p) dfs(i, v);
	for (auto i : g[v]) if (i != p) ans -= ent(save - sz[i]);
	if (~p) ans -= ent(sz[v]);
}


int32_t main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		g[--u].push_back(--v), g[v].push_back(u);
	}
	for (int i = 0; i < n; i++) if (!mark[i]) {
		save = gs(i, -1);
		ans += save * (save - 1) * (save - 2);
		dfs(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...