91分求调WA第一个
查看原帖
91分求调WA第一个
1130187
ASTROX_AXFORCE_RYUGA楼主2025/7/30 16:50
#include<bits/stdc++.h>
using namespace std;

const int N=20005;
int fa[N],sum[N];
int n,m,k;
int dp[N];
int find(int x){
	if(fa[x]==x){
		return x;
	}
	else{
		return fa[x]=find(fa[x]);
	}
}
void merge(int a,int b){
	int fx=find(a),fy=find(b);
	if(fx!=fy){
		fa[fx]=fy;
	}
}
int main(){
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	cin>>m>>k;
	for(int i=0;i<k;i++){
		int x,y;
		cin>>x>>y;
		merge(x,y);
	}
	for(int i=1;i<=n;i++){
		sum[find(i)]++;
	}
	int ans=0;
	sort(sum+1,sum+1+n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			if(abs(dp[j]+sum[i]-m)<abs(dp[i]-m)){
				dp[i]=dp[j]+sum[i];	
			}
		}
		if(abs(ans-m)>abs(dp[i]-m)){
			ans=dp[i];
		}
	}
	cout<<ans;
	return 0;
}
2025/7/30 16:50
加载中...