POJ -2236 Wireless Network

来源:互联网 发布:数控机床的编程 编辑:程序博客网 时间:2024/06/05 09:24

题意:

对于给出的电脑可以进行两项操作:修复和查询。

当两台电脑之间的距离小于d的时候就视为是连通的,套一下模板就可以。

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;int fa[1100],vis[1100];int n,d;struct aa{int x,y;}a[1100];int find(int h)  {      if (h!= fa[h])      {          fa[h] = find(fa[h]); //这个回溯时的压缩路径是精华      }      return fa[h];  } /*int find(int x){while(x!=fa[x])             x=fa[x];    return x; }*/void uni(int c1,int c2){        int dist=(a[c1].x-a[c2].x)*(a[c1].x-a[c2].x)+(a[c1].y-a[c2].y)*(a[c1].y-a[c2].y);         c1=find(c1) ;        c2=find(c2) ;        if(dist<=d*d && c1!=c2)        {                 fa[c1]=c2 ;        }}int main(){scanf("%d%d",&n,&d);for(int i=1;i<1100;i++)fa[i]=i;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);getchar();char te;while(cin>>te){if(te=='S'){int a1,b1;scanf("%d%d",&a1,&b1);if(find(a1)==find(b1)&&vis[a1]&&vis[b1]) puts("SUCCESS");else puts("FAIL");}else {int b1;scanf("%d",&b1);vis[b1]=1;for(int i=1;i<=n;i++){if(!vis[i]||i==b1) {continue;}uni(i,b1);}}} return 0;}


原创粉丝点击