[评测记录 2RE8AC](https://www.luogu.com.cn/record/92985694)
```cpp
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
inline long long read()
{
long long x=0,f=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
{
f=-1;
}
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
ll n;
ll m;
ld calc(ld X1,ld Y1,ld X2,ld Y2)
{
return powl(X1-X2,2)+powl(Y1-Y2,2);
}
vector<ll> P;
ll find(ll x)
{
if(P[x]!=x)
{
P[x]=find(P[x]);
}
return P[x];
}
struct edge
{
ll u,v;
ld w;
friend bool operator<(edge x,edge y)
{
return x.w>y.w;
}
};
__gnu_pbds::priority_queue<edge> q;
__gnu_pbds::priority_queue<ll,greater<ll>> monkeys;
void Kruskal()
{
P.resize(n+1);
for(ll i=0;i<=n;i++)
{
P[i]=i;
}
ld maxn=LONG_LONG_MIN;
while(!q.empty())
{
if(find(q.top().u)!=find(q.top().v))
{
maxn=max(maxn,q.top().w);
P[find(q.top().u)]=find(q.top().v);
}
q.pop();
}
while(monkeys.top()<maxn)
{
monkeys.pop();
}
cout<<monkeys.size();
}
int main()
{
m=read();
for(ll i=0;i<m;i++)
{
ll dis=read();
monkeys.push(dis*dis);
}
n=read();
vector<ll> x(n);
vector<ll> y(n);
for(ll i=0;i<n;i++)
{
x[i]=read();
y[i]=read();
}
for(ll i=0;i<n;i++)
{
for(ll j=i+1;j<n;j++)
{
q.push((edge){i+1,j+1,calc(x[i],y[i],x[j],y[j])});
}
}
Kruskal();
// Debug
// int Debuger=0;
// cin>>Debuger;
return 0;
}
```
by LeNotFound @ 2022-11-06 07:53:27
把```Kruskal()```里面的```while(monkeys.top()<maxn)```改成```while(!monkeys.empty()&&monkeys.top()<maxn)```就过了,原因就是空堆弹出堆顶会报错。
by ZRQ666 @ 2022-11-06 08:29:43
@[ZRQ666](/user/201025) 真的过了 感谢![](https://z3.ax1x.com/2021/05/30/2VNbwQ.png)
by LeNotFound @ 2022-11-06 09:22:43
——————————此贴完结——————————
by LeNotFound @ 2022-11-06 09:22:57