abc350 D题求助
  • 板块学术版
  • 楼主ZJLmath
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/4/20 21:45
  • 上次更新2024/4/21 07:05:20
查看原帖
abc350 D题求助
764672
ZJLmath楼主2024/4/20 21:45

并查集做的,有些拙劣,悬个关

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long f[200005];
int find(int t){
	int tt=t;
	while(f[t]!=t){
		t=f[t];
	}
	return f[tt]=t;
}
long long ans[200005];
long long final;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		f[find(a)]=find(b);
	}
	for(int i=1;i<=n;i++){
		find(i);
	}
	for(int i=1;i<=n;i++){
		ans[f[i]]++;
	}
	for(int i=1;i<=n;i++){
		if(f[i]==i){
			long long sum=ans[i]*(ans[i]-1)/2;
			final+=sum;
		}
	}
	cout<<(final-m)<<endl;
	return 0;
}

2024/4/20 21:45
加载中...