제출 #287318

#제출 시각아이디문제언어결과실행 시간메모리
287318ScarletS철인 이종 경기 (APIO18_duathlon)C++17
23 / 100
1160 ms1048580 KiB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) (int)(x).size()
using namespace std;

const int MAXN = 1e5 + 7;
vector<int> edges[MAXN];
ll subTree[MAXN];
bool done[MAXN];
vector<int> cur;
ll ans=0;

void dfs(int c, int p)
{
	done[c]=1;
	cur.push_back(c);
	subTree[c]=1;
	for (int i : edges[c])
		if (i!=p)
		{
			dfs(i,c);
			ans+=(subTree[i]*(subTree[c]-1));
			//cout<<ans<<" "<<i<<" "<<c<<"\n";
			subTree[c]+=subTree[i];
		}
}

int main()
{
	int n,m,u,v;
	cin>>n>>m;
	while (m--)
	{
		cin>>u>>v;
		edges[u].push_back(v);
		edges[v].push_back(u);
	}
	for (int i=1;i<=n;++i)
		if (!done[i])
		{
			cur.clear();
			dfs(i,0);
			//cout<<ans<<"\n";
			for (int j : cur)
				ans+=((subTree[i]-subTree[j])*(subTree[j]-1));
		}
	cout<<(ans<<1);
}
#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...