Submission #374600

#TimeUsernameProblemLanguageResultExecution timeMemory
374600moratoDuathlon (APIO18_duathlon)C++17
0 / 100
1151 ms1048580 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;

long long ans;
vector<int> adj[N];
int subtree[N], n;

void dfs(int v, int p = 0) {
	subtree[v] = 1;
	for (int u : adj[v]) if (u != p) {
		dfs(u, v);
		subtree[v] += subtree[u];
	}
	long long aux = (v == 1 ? 0ll :  1ll * (n - subtree[v]));
	vector<long long> pref;
	pref.push_back(aux);
	long long local_ans = 0;
	for (int u : adj[v]) if (u != p) {
		assert(!pref.empty());
		local_ans += pref.back() * 1ll * subtree[u];
		pref.push_back(pref.back() + 1ll * subtree[u]);
	}
	ans += 2ll * local_ans;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int m; cin >> n >> m;
	for (int i = 0; i < m; i++) {
		int a, b; cin >> a >> b;
		adj[a].push_back(b);
		adj[b].push_back(a);
	}
	dfs(1);
	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...