莫名MLE,40分。求助各位dalao

P1991 无线通讯网

(发现没有加注释……) ```cpp #include<cstdio> #include<algorithm> #include<cmath> #define MAXP 501 #define reg register using namespace std; struct info { int p_b; int p_e; double dis; }line[MAXP*MAXP]; int px[MAXP],py[MAXP],fa[MAXP]; int ptr=0; int n,p; inline bool cmp(info a,info b) {return(a.dis<b.dis);} inline double pdis(int p,int pit) {return(sqrt((px[p]-px[pit])*(px[p]-px[pit])+(py[p]-py[pit])*(py[p]-py[pit])));}//计算距离 int find(int ptr) { if(fa[ptr]==ptr) return(ptr); return(fa[ptr]=find(ptr)); } inline void addline(int op,int ed,double dist) { line[++ptr].p_b=op; line[ptr].p_e=ed; line[ptr].dis=dist; return; }//连边 int main() { scanf("%d %d",&p,&n); if(p==1) p=0; double ans=0; for(reg int i=1;i<=n;i++) { fa[i]=i; scanf("%d %d",&px[i],&py[i]); for(reg int j=1;j<i;j++) { double dist=pdis(i,j); addline(i,j,dist); }//连边 } sort(line+1,line+1+ptr,cmp);//kruskal主部分 for(reg int i=1;i<=ptr;i++) { int f_b=find(line[i].p_b); int f_e=find(line[i].p_e); if(f_b!=f_e) { p++; ans=max(ans,line[i].dis); fa[f_b]=f_e; if(p==n) break; } } printf("%.2lf",ans); return(0); } ```
by 未见堇开 @ 2018-09-07 20:13:14


@[Redspirit](/space/show?uid=14854) “您不能查看该用户的做题纪律”
by wxy_god @ 2018-09-07 20:15:09


并查集find函数写错了
by fdszlzl @ 2018-09-07 20:20:57


改了一下设置,现在应该能看记录了。 又看了一下自己写的并查集模板,果然是错在find上XD。 谢谢dalao们,我AC了。 https://www.luogu.org/recordnew/show/10541897
by 未见堇开 @ 2018-09-07 21:17:01


|