已 AC,问个小问题

P2504 [HAOI2006] 聪明的猴子

[评测记录 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


|