标签:
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; struct Node { double x,y; }; Node node[1100]; int vis[1100]; double mat[1005][1005]; int fa[1005]; int find(int x) { return fa[x]==x?x:find(fa[x]); } void bin(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { fa[fx]=fa[fy]; } } int main() { int n,m; int i,j,k; int x,y; int f,t; double d; char str[10]; memset(vis,0,sizeof(vis)); memset(mat,-1,sizeof(mat)); scanf("%d%lf",&n,&d); for(i=0;i<=n;i++) { fa[i]=i; } for(i=1;i<=n;i++) { scanf("%lf%lf",&node[i].x,&node[i].y); } for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { double tx=fabs(node[i].x-node[j].x); double ty=fabs(node[i].y-node[j].y); //printf("%.2f %.2f\n",tx,ty); double len=sqrt(tx*tx+ty*ty); if(len<=d) mat[i][j]=mat[j][i]=len; else mat[i][j]=mat[j][i]=-1; //printf("%.2f %.2f\n",len,mat[i][j]); } } /* for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%.2lf ",mat[i][j]); } printf("\n"); }*/ while(scanf("%s",str)!=EOF) { if(str[0]==‘O‘) { scanf("%d",&x); vis[x]=1; for(i=1;i<=n;i++) { if(vis[i]==1&&mat[x][i]!=-1) { bin(x,i); } } } else if(str[0]==‘S‘) { scanf("%d%d",&x,&y); if(find(x)==find(y)) { printf("SUCCESS\n"); } else printf("FAIL\n"); } } return 0; }
poj 2236 Wireless Network(并查集)
标签:
原文地址:http://www.cnblogs.com/sola1994/p/4693015.html