Submission #1013957

#TimeUsernameProblemLanguageResultExecution timeMemory
1013957pccDuathlon (APIO18_duathlon)C++17
23 / 100
1076 ms1048576 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
const int mxn = 1e5+10;
vector<int> tree[mxn];
int N,M;
bitset<mxn> vis;
int dp[mxn];
ll ans = 0;

void dfs1(int now,int fa){
	vis[now] = true;
	dp[now] = 1;
	for(auto nxt:tree[now]){
		if(nxt == fa)continue;
		dfs1(nxt,now);
		dp[now] += dp[nxt];
	}
	return;
}
void dfs2(int now,int fa,int sz){
	ll sum = 0;
	for(auto nxt:tree[now]){
		if(nxt == fa)continue;
		dfs2(nxt,now,sz);
		ans += sum*dp[nxt]*2;
		sum += dp[nxt];
	}
	ll ts = sz-dp[now];
	ans += sum*ts*2;
	return;
}

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N>>M;
	for(int i = 0;i<M;i++){
		int a,b;
		cin>>a>>b;
		tree[a].push_back(b);
		tree[b].push_back(a);
	}
	for(int i = 1;i<=N;i++){
		if(vis[i])continue;
		dfs1(i,i);
		dfs2(i,i,dp[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...