这就很尴尬了 40分 WA后三个点

P1991 无线通讯网

#求各位dalao指教
by 特大号的黑音 @ 2017-06-01 22:50:08


借楼..也是40分 ```cpp #include<cstdio> #include<algorithm> #include<cmath> using namespace std; struct wire{ int a,b,v; }map[300000]; struct station{ int x,y; }m[501]; int S,P,x,y,fa[501],cnt,t; double ans; int dis(int x1,int x2,int y1,int y2){return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);} bool cmp(wire x,wire y){return x.v<y.v;} int ask(int x){return fa[x]=x?x:fa[x]=ask(x);} void unite(int x,int y){fa[x]=y;} void add(int x,int y){map[++cnt].a=x;map[cnt].b=y;map[cnt].v=dis(m[x].x,m[y].x,m[x].y,m[y].y);} void init(){ scanf("%d%d",&S,&P); for(int i=1;i<=P;i++){ scanf("%d%d",&x,&y); m[i].x=x;m[i].y=y; } for(int i=2;i<=P;i++)for(int j=1;j<i;j++)add(i,j); sort(map+1,map+1+cnt,cmp); } void Kruskal(){ t=0; for(int i=1;i<=P;i++)fa[i]=i; for(int i=1;i<=cnt;i++){ int x=ask(map[i].a); int y=ask(map[i].b); if(x!=y){ unite(x,y); ans=sqrt(map[i].v); if(++t==P-S)return; } } } void print(){printf("%.2lf",ans);} int main(){ init(); Kruskal(); print(); return 0; } ```
by 2344b @ 2018-03-28 11:09:25


|