poj 2236 Wireless Network(并查集)

题目大意:

给你N台电脑,从1-N。一个数字,表示两台计算机的最大通信距离,超过这个距离就无法进行通信。然后分别告诉这些电脑的坐标,接下来有两种操作,第一种O表示这点电脑修好,第二种S,表示测试这两台电脑能不能进行正常的通信

 

解题思路:

并查集的简单应用,对每次修好的电脑对其它已经修好的电脑遍历,如果距离小于等于最大通信距离就将他们合并。之后判断2台电脑是不是一个集合中就KO了

 

 

 1 #pragma comment(linker, "/STACK:1024000000,1024000000")
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<math.h>
 7 #include<algorithm>
 8 #include<queue>
 9 #include<set>
10 #include<bitset>
11 #include<map>
12 #include<vector>
13 #include<stdlib.h>
14 #include <stack>
15 using namespace std;
16 #define PI acos(-1.0)
17 #define max(a,b) (a) > (b) ? (a) : (b)
18 #define min(a,b) (a) < (b) ? (a) : (b)
19 #define ll long long
20 #define eps 1e-10
21 #define MOD 1000000007
22 #define N 1006
23 #define inf 1e12
24 int n,d;
25 int vis[N];
26 int fa[N];
27 struct Node{
28    int x,y;
29 }node[N];
30 void init(){
31    for(int i=0;i<N;i++){
32       fa[i]=i;
33    }
34 }
35 int find(int x){
36    return x==fa[x]?x:fa[x]=find(fa[x]);
37 }
38 void merge(int x,int y){
39    int root1=find(x);
40    int root2=find(y);
41    if(root1==root2) return;
42    if((node[x].x-node[y].x)*(node[x].x-node[y].x)+(node[x].y-node[y].y)*(node[x].y-node[y].y)<=d*d){
43       fa[root1]=root2;
44    }
45 }
46 int main()
47 {
48         scanf("%d%d",&n,&d);
49         init();
50         memset(vis,0,sizeof(vis));
51         for(int i=1;i<=n;i++){
52            scanf("%d%d",&node[i].x,&node[i].y);
53         }
54         char s[3];
55         int p,q;
56         while(scanf("%s",s)!=EOF){
57            if(s[0]=='O'){
58               scanf("%d",&p);
59               vis[p]=1;
60               for(int i=1;i<=n;i++){
61                  if(vis[i] && i!=p){
62                     merge(i,p);
63                  }
64               }
65            }else{
66               scanf("%d%d",&p,&q);
67               if(find(p)==find(q)){
68                printf("SUCCESS\n");
69               }else{
70                  printf("FAIL\n");
71               }
72            }
73         }
74 
75     return 0;
76 }
View Code

 

posted @ 2015-11-07 15:48  UniqueColor  阅读(203)  评论(0编辑  收藏  举报