为什么不对??
查看原帖
为什么不对??
1385996
ZSYhaouuan楼主2024/12/16 16:57

马蜂良好

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N = 1e3+100;
struct P {
	ll x, y;
} p[N];
struct node {
	double x, y, val;
} a[N];
ll m, n, cnt,num,ans;
double mx=-1e9;
ll mon[N], fa[N];
bool cmp(node a, node b) {
	return a.val < b.val;
}
ll fin(ll x) {
	if (fa[x] == x) return x;
	return fa[x] = fin(fa[x]);
}
int main() {
	cin >> m;
	for (ll i = 1; i <= m; i++) {
		cin >> mon[i];
	}
	cin >> n;
	for (ll i = 1; i <= 1000; i++) fa[i] = i;
	for (ll i = 1; i <= n; i++) {
		cin >> p[i].x >> p[i].y;
	}
	for (ll i = 1; i < n; i++) {
		for (ll j = i + 1; j <= n; j++) {
			cnt++;
			a[cnt].x = i;
			a[cnt].y = j;
			a[cnt].val = sqrt((p[i].x - p[j].x) * (p[i].x - p[j].x) * 1.0 + (p[i].y - p[j].y) * (p[i].y - p[j].y) * 1.0);
		}
	}
//	cout<<"<<<\n";
//	for(ll i=1;i<=cnt;i++) cout<<a[i].val<<" ";
//	cout<<"\n";
	sort(a + 1, a + cnt + 1, cmp);
	for (ll i = 1; i <= n; i++) {
		ll t1 = fin(a[i].x), t2 = fin(a[i].y);
		if (t1 == t2) continue;
		fa[t1] = t2;
		num++;mx=max(mx,a[i].val);
		if(num==n-1) break;
	}
//	cout<<"<<<\n";
//	for(ll i=1;i<=cnt;i++) cout<<a[i].val<<" ";
//	cout<<"\n";
//	cout<<"<<<"<<mx<<"\n";
	for(ll i=1;i<=m;i++){
		if(mon[i]>=mx) ans++;
	}
	cout<<ans;
	return 0;
}
2024/12/16 16:57
加载中...