poj 2236 Wireless Network 并查集
#include <stdio.h> #include <string.h> #include <math.h> #define maxn 1220 double x[maxn],y[maxn],d; bool vis[maxn]; int p[maxn]; int n; double dist(int i,int j) { return fabs( (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]) ); } int find(int x) { if(x==p[x]) return p[x]; return p[x]=find(p[x]); } void link(int a,int b) { int fa=find(a); int fb=find(b); if(fa!=fb) p[fa]=fb; } int main() { int i; int u,v; scanf("%d%lf",&n,&d); for(i=1;i<=n;i++) { scanf("%lf%lf",&x[i],&y[i]); p[i]=i; vis[i]=0; } char op; getchar(); while(scanf("%c",&op)!=EOF) { if(op==‘O‘) { scanf("%d",&u); vis[u]=1; for(i=1;i<=n;i++) if(vis[i]&&i!=u&&dist(i,u)<=d*d) link(i,u); } else { scanf("%d%d",&u,&v); int fu=find(u); int fv=find(v); if(fu!=fv) printf("FAIL\n"); else printf("SUCCESS\n"); } getchar(); } return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。