제출 #1361688

#제출 시각아이디문제언어결과실행 시간메모리
1361688javkhlantogs철인 이종 경기 (APIO18_duathlon)C++20
23 / 100
1110 ms1114112 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> par;
ll root(ll u){
	if(par[u]==u) return u;
	ll rt=root(par[u]);
	par[u]=rt;
	return rt;
}
void join(ll u,ll v){
	ll ru=root(u);
	ll rv=root(v);
	if(ru==rv) return;
	par[ru]=rv;
}
ll ans=0;
vector<vector<ll>> e;
vector<ll> sz;
ll getsz(ll u,ll p){
	sz[u]=1;
	for(auto v:e[u]){
		if(v==p) continue;
		sz[u]+=getsz(v,u);
	}
	return sz[u];
}
void dfs(ll u,ll p,ll r){
	ll sum=0;
	for(auto v:e[u]){
		if(v==p) continue;
		ans+=sum*sz[v];
		sum+=sz[v];
	}
	ans+=sum*(sz[r]-sz[u]);
	for(auto v:e[u]){
		if(v==p) continue;
		dfs(v,u,r);
	}
}
int main(){
	ll n,m,i,j,k,q;
	cin>>n>>m;
	par.resize(n+1);
	e.resize(n+1);
	sz.resize(n+1);
	for(i=1 ; i<=n ; i++) par[i]=i;
	for(i=0 ; i<m ; i++){
		cin>>j>>k;
		join(j,k);
		e[j].push_back(k);
		e[k].push_back(j);
	}
	set<ll> st;
	for(i=1 ; i<=n ; i++) st.insert(root(i));
	for(auto v:st){
		getsz(v,v);
		dfs(v,v,v);
	}
	cout<<ans*2<<"\n";
	return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…