poj 2236:Wireless Network(并查集,提高题)
Time Limit: 10000MS | Memory Limit: 65536K | |
Total Submissions: 16065 | Accepted: 6778 |
Description
In the process of repairing the network, workers can take two kinds of operations at every moment, repairing a computer, or testing if two computers can communicate. Your job is to answer all the testing operations.
Input
1. "O p" (1 <= p <= N), which means repairing computer p.
2. "S p q" (1 <= p, q <= N), which means testing whether computer p and q can communicate.
The input will not exceed 300000 lines.
Output
Sample Input
4 1 0 1 0 2 0 3 0 4 O 1 O 2 O 4 S 1 4 O 3 S 1 4
Sample Output
FAIL SUCCESS
Source
1 #include <iostream>
2 #include <stdio.h>
3 #include <cmath>
4 using namespace std;
5
6 #define MAXN 1010
7
8 int dx[MAXN],dy[MAXN]; //坐标
9 int par[MAXN]; //par[x]表示x的父节点
10 int repair[MAXN] ={0};
11 int n;
12
13 void Init() //初始化
14 {
15 int i;
16 for(i=0;i<=n;i++)
17 par[i] = i;
18 }
19
20 int Find(int x) //查询x的根节点并路径压缩
21 {
22 if(par[x]!=x)
23 par[x] = Find(par[x]);
24 return par[x];
25 }
26
27 void Union(int x,int y) //合并x和y所在集合
28 {
29 par[Find(x)] = Find(y);
30 }
31
32 int Abs(int n)
33 {
34 return n>0?n:-n;
35 }
36
37 double Dis(int a,int b)
38 {
39 return sqrt( double(dx[a]-dx[b])*(dx[a]-dx[b]) + (dy[a]-dy[b])*(dy[a]-dy[b]) );
40 }
41
42 int main()
43 {
44 int d,i;
45
46 //初始化
47 scanf("%d%d",&n,&d);
48 Init();
49
50 //输入坐标
51 for(i=0;i<n;i++){
52 scanf("%d%d",&dx[i],&dy[i]);
53 }
54
55 //操作
56 char cmd[2];
57 int p,q,len=0;
58 while(scanf("%s",cmd)!=EOF){
59 switch(cmd[0]){
60 case ‘O‘:
61 scanf("%d",&p);
62 p--;
63 repair[len++] = p;
64 for(i=0;i<len-1;i++) //遍历所有修过的计算机,看能否联通
65 if( repair[i]!=p && Dis(repair[i],p)<=double(d) )
66 Union(repair[i],p);
67 break;
68 case ‘S‘:
69 scanf("%d%d",&p,&q);
70 p--,q--;
71 if(Find(p)==Find(q)) //是否有路
72 printf("SUCCESS\n");
73 else
74 printf("FAIL\n");
75 default:
76 break;
77 }
78 }
79
80 return 0;
81 }
Freecode : www.cnblogs.com/yym2013
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。