제출 #1192026

#제출 시각아이디문제언어결과실행 시간메모리
1192026tinkerbells철인 이종 경기 (APIO18_duathlon)C++20
23 / 100
1128 ms1114112 KiB
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <deque>
#include <map>
#define SZ(x) int(x.size())
#define FR(i,a,b) for(int i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
typedef long long LL;
typedef long double LD;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;

const int MAXN=1e5+5;
vector<int> adj[MAXN];
LL siz[MAXN];
LL ans=0;

void dfs(int u, int par){
	siz[u]=1;
	for (auto to: adj[u]){
		if (to==par) continue;
		dfs(to,u);
		siz[u]+=siz[to];
	}
}

void cal(int u, int par, LL total){
	LL calc=(total-1)*(total-1);
	for (auto to: adj[u]){
		if (to==par){
			calc-=(total-siz[u])*(total-siz[u]);
		}
		else{
			calc-=(siz[to])*(siz[to]);
			cal(to, u, total);
		}
	}
	ans+=calc;
}

signed main(){
	FAST;
	int n,m; cin>>n>>m;
	FOR(i,m){
		int u,v; cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	
	FR(i,1,n+1){
		if (siz[i]==0){
			dfs(i,-1);
			LL temp=siz[i];
		    cal(i,-1,temp);
		}
	}
	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...