50分求助 貌似不是init 的问题(我看了上一个50分……)

P2504 [HAOI2006] 聪明的猴子

```cpp #include<bits/stdc++.h> using namespace std; struct Tree{ int id; double dist; bool operator <(const Tree&x)const{ return dist>x.dist; } }d; struct ZYZ{int x,y;}tre[1010]; double a[1010][1010],dis[1010],jump[510],Max,cnt; int vis[1010],n,m; priority_queue<Tree> q; bool cmp(double a,double b){return a>b;} double getdist(double x1,double x2,double y1,double y2){return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);} int main(){ scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%lf",&jump[i]); sort(jump+1,jump+1+m,cmp); for(int i=0;i<1010;i++)dis[i]=0x3f3f3f3f; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&tre[i].x,&tre[i].y); for(int j=1;j<i;j++){ double far=getdist(tre[i].x,tre[j].x,tre[i].y,tre[j].y); a[i][j]=far; a[j][i]=far; } } dis[1]=0; q.push((Tree){1,dis[1]}); while(!q.empty()){ d=q.top(); q.pop(); int x=d.id; double w=d.dist; if(vis[x]) continue; vis[x]=1; Max=max(Max,w); cnt++; for(int i=1;i<=n;i++){ if(dis[i]>a[x][i]&&!vis[i]&&a[x][i]){ dis[i]=a[x][i]; q.push((Tree){i,dis[i]}); } } if(cnt==n) break; } int i=1,ans=0; while(jump[i]*jump[i]>=Max&&i<=m) ans++,i++; printf("%d",ans); return 0; } ```
by mmh08100566 @ 2023-02-18 08:07:06


@[行动欲望π](/user/377578) %%%
by mmh08100566 @ 2023-02-18 08:07:26


AWA 我谢谢你
by 行动欲望π @ 2023-02-18 09:04:00


|