蜜汁50pts
查看原帖
蜜汁50pts
746930
NO_OI_NO_LIFE楼主2023/9/24 21:24
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,cnt,f[1000005],mky[1000005],k;
double uuu;
int ans;
double sum;

struct node{
	int to,nxt;
	double wei;
}e[2000005];

bool cmp(node a,node b){
	return a.wei<b.wei;
}

int find(int x){
	if(x==f[x]) return f[x];
	return f[x]=find(f[x]);
}

void kruskal(){
	int a,b;
	k=m;
	for(int i=1;i<=cnt;i++){
		a=find(e[i].to);
		b=find(e[i].nxt);
		if(a!=b){
			f[a]=b;
			sum=e[i].wei;
			k--;
			if(k==1) return;
		}
	}
}

double u[1005],v[1005];

int main(){
    //freopen("binary.in","r",stdin);
    //freopen("binary.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
    	f[i]=i;
		cin>>mky[i];
    }
    cin>>m;
	for(int i=1;i<=m;i++) cin>>u[i]>>v[i];
    for(int i=1;i<=m;i++){
		for(int j=i+1;j<=m;j++){
			uuu=(sqrt((double)(u[i] - u[j]) * (u[i] - u[j]) + (double)(v[i] - v[j]) * (v[i] - v[j])));
			e[++cnt].to=i;
			e[cnt].nxt=j;
			e[cnt].wei=uuu;
		}
	}
	sort(e+1,e+cnt+1,cmp);
	kruskal();
	for(int i=1;i<=n;i++)
		if(mky[i]>=sum)
			ans++;
	printf("%d\n",ans);
	return 0;
}
2023/9/24 21:24
加载中...