码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2236 加点 然后判断某两点是否连通

时间:2015-06-23 23:02:20      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

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

修电脑就是把这点加入到图中,S 就是判断这两个结点在不在同一个集合里,也就是是否连通

Sample Input

4 1 //n d
0 1 // x y
0 2
0 3
0 4
O 1
O 2
O 4
S 1 4
O 3
S 1 4
Sample Output

FAIL
SUCCESS

 

技术分享
 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <cmath>
 6 # include <queue>
 7 # define LL long long
 8 using namespace std ;
 9 
10 const int MAXN=1010;
11 int F[MAXN] ;
12 int x[MAXN] ;
13 int y[MAXN] ;
14 int v[MAXN] ;
15 int n , d ;
16 int find(int x) //找x的祖先结点
17 {
18     while(x!=F[x])
19         x=F[x];
20      return x;
21 }
22 void bing(int u,int v)
23 {
24     int t1=find(u);
25     int t2=find(v);
26     if(t1!=t2) //这两个点不在一个集合里
27       F[t1]=t2; //合到一个集合里
28 }
29 
30 bool dist(int a , int b)
31 {
32     int t1 = x[a] - x[b] ;
33     int t2 = y[a] - y[b] ;
34     if(t1*t1 + t2*t2 <= d*d)
35         return 1 ;
36     else
37         return 0 ;
38 }
39 
40 int main()
41 {
42     //freopen("in.txt","r",stdin) ;
43     cin>>n>>d ;
44     int i ;
45     for (i = 1 ; i<= n ; i++)
46         cin>>x[i]>>y[i] ;
47     for (i = 1 ; i<= n ; i++)
48     {
49         F[i] = i ;
50         v[i] = 0 ;
51     }
52     char c ;
53     int t ;
54     while(cin>>c)
55     {
56         if (c == O)
57         {
58             cin>>t ;
59             v[t] = 1 ;
60             for (i = 1 ; i<= n ; i++)
61             {
62                 if (i != t && v[i] && dist(i,t))
63                     bing(i,t) ;
64             }
65         }
66         if (c == S)
67         {
68             int u , v ;
69             cin>>u>>v ;
70             int t1=find(u);
71             int t2=find(v);
72             if(t1!=t2) //不连通
73                 cout << "FAIL" << endl;
74             else
75                 cout << "SUCCESS" << endl;
76         }
77     }
78 
79 
80     return 0;
81 }
View Code

 

poj 2236 加点 然后判断某两点是否连通

标签:

原文地址:http://www.cnblogs.com/-Buff-/p/4596270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!