poj 2236

并查集水题

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 int n,m,t;
 9 struct node
10 {
11     int x,y;
12 }A[1005];
13 int rank[1005],pre[1005];
14 int dist(node A,node B)
15 {
16     return (A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y);
17 }
18 void init(int n)
19 {
20     for(int i=1;i<=n;i++)
21     {
22         rank[i]=1;
23         pre[i]=i;
24     }
25 }
26 int find(int x)
27 {
28     if(pre[x]!=x)    pre[x]=find(pre[x]);
29     return pre[x];
30 }
31 void Union(int x,int y)
32 {
33     x=find(x);
34     y=find(y);
35     if(x==y)    return;
36     if(rank[x]>=rank[y])
37     {
38         pre[y]=x;
39         rank[x]+=rank[y];
40     }
41     else
42     {
43         pre[x]=y;
44         rank[y]+=rank[x];
45     }
46 }
47 int main()
48 {
49     int i,j,k;
50     //freopen("1.in","r",stdin);
51     scanf("%d",&n);
52     init(n);
53     scanf("%d",&k);
54     for(i=1;i<=n;i++)   scanf("%d%d",&A[i].x,&A[i].y);
55     char s[20];
56     int aa[1005],tot=0;
57     while(scanf("%s",s)!=EOF)
58     {
59         if(s[0]==‘O‘)
60         {
61             int q;
62             scanf("%d",&q);
63             for(i=0;i<tot;i++)
64             {
65                 if(dist(A[aa[i]],A[q])<=k*k)
66                 {
67                    // printf("%d %d\n",aa[i],q);
68                     Union(aa[i],q);
69                 }
70             }
71             aa[tot++]=q;
72         }
73         else
74         {
75             int p,q;
76             scanf("%d%d",&p,&q);
77             p=find(p);
78             q=find(q);
79             if(p==q)    printf("SUCCESS\n");
80             else printf("FAIL\n");
81         }
82     }
83     return 0;
84 }
时间: 2024-12-18 22:29:20

poj 2236的相关文章

POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集

POJ 2236 Wireless Network http://poj.org/problem?id=2236 题目大意: 给你N台损坏的电脑坐标,这些电脑只能与不超过距离d的电脑通信,但如果x和y均能C通信,则x和y可以通信.现在给出若干个操作, O p 代表修复编号为p的电脑 S p q代表询问p和q是不是能通信. 思路: 并查集即可.. 如果修复了一台电脑,则把与它相连距离不超过d的且修复了的放在一个集合里面. #include<cstdio> #include<cstring&

poj 2236:Wireless Network(并查集,提高题)

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 6778 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer

(并查集) Wireless Network --POJ --2236

链接: http://poj.org/problem?id=2236 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#problem/A 代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> #include<iostream>

Wireless Network POJ 2236

http://poj.org/problem?id=2236 题意:现有一些电脑(编号从 1 - N),在修理好某台电脑并且当这台电脑与其他电脑距离不超过 D 的情况下, 其他电脑可以由这台电脑控制.       有两种操作:一是修理编号为 x 的某台电脑, 而是询问你编号从 p - q 的电脑是否都彼此联通 #include <iostream> #include <cstdio> #include <cmath> #include <algorithm>

源哥每日一题第十九弹 poj 2236 还是冰茶集

连接:http://poj.org/problem?id=2236 题意:有一堆坏电脑,和两种操作:O表示修好这台电脑,S 询问两台电脑是否联通.主要是判电脑是否联通:两台电脑间距离小于d就是联通的. 题解:emmm--直接写啊 #include <iostream> #include <cstdio> using namespace std; int n; long long d; int pre[1005]; int jud[1005]; struct coor { long

poj 2236 Wireless Network (并查集)

链接:http://poj.org/problem?id=2236 题意: 有一个计算机网络,n台计算机全部坏了,给你两种操作: 1.O x 修复第x台计算机 2.S x,y 判断两台计算机是否联通 联通的条件: 两台都修复好了,求距离小于d 思路: 数据很小,我们可以没修复一台就直接枚举已经修复的计算机找到距离小于d的,放到一个并查集里,查询的话直接查询是否再同一个并查集里就好了 实现代码: //while(scanf("\n%c", &ope) != EOF) #inclu

[并查集] POJ 2236 Wireless Network

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 25022   Accepted: 10399 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap compute

Wireless Network (poj 2236 并查集)

Language: Default Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17602   Accepted: 7418 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network wit

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

题目大意:给你N台电脑,从1-N.一个数字,表示两台计算机的最大通信距离,超过这个距离就无法进行通信.然后分别告诉这些电脑的坐标,接下来有两种操作,第一种O表示这点电脑修好,第二种S,表示测试这两台电脑能不能进行正常的通信 修电脑就是把这点加入到图中,S 就是判断这两个结点在不在同一个集合里,也就是是否连通 Sample Input 4 1 //n d0 1 // x y0 20 30 4O 1O 2O 4S 1 4O 3S 1 4Sample Output FAILSUCCESS 1 # in

POJ 2236 Wireless Network (并查集)

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 18066   Accepted: 7618 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer