A - Wireless Network

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 int par[1005];
 7 bool b[1005];//判断哪个电脑被修好了
 8 struct 
 9 {
10     int x,y;
11 }a[1005];
12 void init(int n)
13 {
14     for(int i=1;i<=n;i++)
15     {
16         par[i]=i;
17     }
18 }
19 int find(int x)
20 {
21     if(par[x]==x)
22     {
23         return x;
24     }
25     else
26     {
27         return par[x]=find(par[x]);
28     }
29 }
30 void unite(int x,int y)
31 {
32     x=find(x);
33     y=find(y);
34     if(x!=y)
35         par[x]=y;
36     else 
37         return ;
38 }
39 bool same(int x,int y)
40 {
41     return find(x)==find(y);
42 }
43 int main (void)
44 {
45     memset(b,false,sizeof(b));
46     int num;int maxx;
47     cin>>num>>maxx;
48     init(num);
49     for(int i=1;i<=num;i++)
50     {
51         scanf("%d %d",&a[i].x,&a[i].y);
52     }
53     char op;
54     int id;
55     while(~scanf(" %c",&op))
56     {
57         if(op=='O')
58         {
59             scanf("%d",&id);
60             b[id]=true;
61 
62             for(int i=1;i<=num;i++)
63             {
64                 if(b[i]==true)
65                 {   
66                     int di=(a[id].x-a[i].x)*(a[id].x-a[i].x)+
67                         (a[id].y-a[i].y)*(a[id].y-a[i].y);
68                     if(di<=maxx*maxx)//如果比限制距离小,可以合并
69                     {
70                         unite(id,i);
71                     }
72                 }
73             }
74         }
75         if(op=='S')
76         {
77             int c,d;
78             scanf("%d %d",&c,&d);
79             if(find(d)==find(c))
80                 printf("SUCCESS\n");
81             else
82                 printf("FAIL\n");
83         }
84     }
85     return 0;
86 }

猜你喜欢

转载自www.cnblogs.com/jaydenouyang/p/9387898.html