제출 #1196475

#제출 시각아이디문제언어결과실행 시간메모리
1196475mertbbm철인 이종 경기 (APIO18_duathlon)C++20
0 / 100
85 ms38656 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long 
#define ld long double
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<int,int>pii;
typedef pair<ld,ld>pi2;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());
int ran(int index){return rng()%index;}

vector<int>adj[200005];
vector<int>bcc[200005];
int in[200005];
int dp[200005];
int n,m;
int ptr=0;
int cnt=1;
vector<int>stk;
int num=0;

void dfs(int index, int par){
	in[index]=dp[index]=++ptr;
	stk.push_back(index);
	num++;
	for(auto it:adj[index]){
		if(it==par) continue;
		if(in[it]){
			dp[index]=min(dp[index],in[it]);
		}
		else{
			dfs(it,index);
			dp[index]=min(dp[index],in[it]);
			if(dp[it]>=in[index]){
				bcc[index].push_back(n+cnt);
				while(!bcc[n+cnt].size()||bcc[n+cnt].back()!=it){
					bcc[n+cnt].push_back(stk.back());
					stk.pop_back();
				}
				cnt++;
			}
		}
	}
}

int counter=0;
int sz[200005];

void dfs2(int index){
	sz[index]=(index<=n);
	for(auto it:bcc[index]){
		dfs2(it);
		sz[index]+=sz[it];
		if(index>n){
			counter-=bcc[index].size()*sz[it]*(sz[it]-1);
		}
	}
	if(index>n) counter-=bcc[index].size()*(n-sz[index])*(n-sz[index]-1);
}

void solve(){
	cin >> n >> m;
	
	int temp,temp2;
	for(int x=0;x<m;x++){
		cin >> temp >> temp2;
		adj[temp].push_back(temp2);
		adj[temp2].push_back(temp);
	}
	
	for(int x=1;x<=n;x++){
		if(in[x]) continue;
		num=0;
		dfs(x,-1);
		dfs2(x);
		counter+=(num)*(num-1)*(num-2);
	}
	
	cout << counter;
}	
																   
int32_t main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t=1;
	//cin >> t;
	while(t--){
		solve();
	}
}
#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...