这也能过??
查看原帖
这也能过??
910357
songzhihan2010楼主2024/3/3 10:02
#include<bits/stdc++.h>
using namespace std;
int n,m;
int k;
int size[20001];
int fa[20001];
int dp[20001];
int ans=1000000,ans1;
int find(int x){
	if(fa[x]==x){
		return fa[x];
	}
	fa[x]=find(fa[x]);
	return fa[x];
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	if(m==0){
		cout<<"0";
		return 0;
	}
	if(k==0){
		cout<<m;
		return 0;
	}
	for (int i=1;i<=n;i++){
		size[i]=1;
		fa[i]=i;
	}
	for (int i=1;i<=k;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		int u1=find(u);
		int v1=find(v);
		if(u1!=v1){
			fa[u1]=v1;
			size[v1]+=size[u1];
			size[u1]=1000000;
		}
	}
//	for (int )
	sort(size+1,size+1+n);
	for (int i=1;i<=n&&size[i]!=1000000;i++){
		size[i]+=size[i-1];
		for (int j=0;j<=i;j++){
			if(ans>abs(m-(size[i]-size[j]))){
				ans=abs(m-(size[i]-size[j]));
				ans1=size[i]-size[j];
//				cout<<1;
			}
		}
		
//		 else {
//			break;
//		}
	}
	cout<<ans1;
}
2024/3/3 10:02
加载中...