poj 2236

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int f[1005];
 6 int x[1005],y[1005];
 7 bool v[1005];
 8 int n,p,k1,k2,r,r1;
 9 
10 int find(int i)
11 {
12     //查找并进行路径压缩 
13     if(i != f[i])
14         f[i]=find(f[i]);
15     return f[i];    
16 }
17  
18 bool dis(int a,int b)
19 {
20     //计算距离看符不符合题目所给的 
21     int q=x[a]-x[b];
22     int w=y[a]-y[b];
23     if(q*q+w*w<=p*p)
24         return true;
25     else
26         return false;
27 }
28 //初始化 
29 void init()
30 {
31      for(int i=1;i<=n;i++)
32      {
33          f[i]=i;
34          //记录计算机是否已经修复 
35          v[i]=false; 
36      }
37 }
38  
39 int main()
40 {
41     int i;
42     char s;
43     scanf("%d %d",&n,&p);
44         init();
45         for (i=1;i<=n;i++)   
46                scanf("%d%d",&x[i],&y[i]);  
47         while(cin>>s)
48         {
49             if(s == 'O')
50             {
51                 scanf("%d",&r);
52                 v[r]=true;
53                 for(i=1;i<=n;i++)
54                     if(i!=r && v[i] && dis(i,r))
55                     {
56                         k1=find(r);
57                         k2=find(i);
58                         f[k1]=k2;
59                     }
60             }
61             
62             if(s == 'S')
63             {
64                 scanf("%d %d",&r,&r1);
65                 k1=find(r);
66                 k2=find(r1);
67                 if(k1 == k2)//两者有共同的祖先 
68                     printf("SUCCESS\n");
69                 else
70                     printf("FAIL\n");
71                 
72             }
73         }    
74     return 0;
75 } 

 

posted @ 2015-08-14 15:41  澧浦  阅读(145)  评论(0)    收藏  举报