并查集 poj2236

网址:http://poj.org/problem?id=2236

题意:有n台坏的电脑,如果每两台电脑的距离不能超过d,那么这两台电脑有联系,用字符串O 表示标记第x台电脑维修了,用S判断从X到y是否有联系。。。

题解:用并查集记录和查找每个点的父亲节点,每次输入的同时遍历该点和其他点是否有联系(即距离小于等于的)。。。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 struct point
 6 {
 7     int x,y;
 8     int pre;
 9     bool k;
10 }p[1002];
11 void New(int n)
12 {
13     for(int i=1; i<=n; i++)
14     {
15         p[i].pre=i;
16     }
17 }
18 int find(int x)
19 {
20     if(p[x].pre!=x)
21     {
22         p[x].pre=find(p[x].pre);
23     }
24     return p[x].pre;
25     //return x == p[x].pre ? x : find(p[x].pre);
26 }
27 int dis(point p1,point p2)
28 {
29     return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
30 }
31 void Union(point p1,point p2,int d)
32 {
33     int root1=find(p1.pre);
34     int root2=find(p2.pre);
35     if(root1 != root2)
36     {
37         if( dis(p1,p2) <= d * d )
38         {
39             p[root2].pre = root1;
40         }
41     }
42 }
43 int main()
44 {
45     char s;
46     int n , d;
47     scanf( "%d%d", &n ,&d);
48     New(n);
49     for(int i =  1 ; i <= n; i++)
50     {
51         scanf( "%d%d", &p[i].x , &p[i].y);
52     }
53     while(~scanf("\n%c", &s))
54     {
55         int r , a, b;
56         if(s==‘O‘)
57         {
58             scanf("%d", &r);
59             p[r].k=1;
60             for(int i = 1; i <= n; i++)
61                 if(p[i].k && i != r)
62                     Union(p[i] , p[r],d);
63         }
64         else
65         {
66             scanf("%d%d", &a, &b);
67                 if(find(a) == find(b))
68                     printf("SUCCESS\n");
69                 else
70                     printf("FAIL\n");
71         }
72     }
73 }

时间: 2024-11-08 08:38:58

并查集 poj2236的相关文章

并查集——poj2236(带权并查集)

题目:Wireless Network 题意:给定n台已损坏计算机的位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: "O p" (1 <= p <= N) :表示修理计算机p: "S p q" (1 <= p, q <= N) :表示检测计算机p和计算机q能否通信. 输出:能通信则输出"SUCCESS",否则输出"FAIL" 题解: 带权并查集还是那个重要的知识点--关系. 此题,我们使

并查集---------kuangbin带你飞合集

并查集的一个很重要的特性是传递性,如可以从a可以到b,从b可以到c,那么从a可以到c,如果满足这个的条件,要求一些特定的集合判定,属于那些集合,大多都属于并查集 poj2236 题意很简明:::: 在一次地震中有n台电脑被损坏了,然后给出这n台电脑的坐标! 随后给出多组询问,以0开头就表示修理好这台电脑,如果是s就表示求两台电脑之间能否通讯 通讯的条件是两台电脑距离小于等于d且具有传递性  如a能和b通信,b能和c通信,然后a便能和c通信 一个要注意的一点是给出的欧几里得距离,但是这些坐标都是整

POJ2236 wireless network 【并查集水题】

前端开发whqet,csdn,王海庆,whqet,前端开发专家 今天是个好日子,2014年5月20日,表白的最佳时机,虽说孩子已经四岁.结婚已经五年,但是也不可以偷懒,于是有了这个效果. 在线研究点这里,下载收藏点这里.程序猿and程序媛,大胆秀出你的爱吧. 利用html5 canvas实现动态的文字粒子效果,效果如下. OK,简单看看原理,首先我们需要在canvas里面实现描边文字,然后利用getImageData获得描边文字的像素矩阵,将粒子效果绑定在描边文章上. 整个效果如下. html文

poj-2236 Wireless Network (基础并查集)

http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由于硬件的限制,一台电脑和另一台电脑能够相连当他们之间的距离小于d,或者还有一台电脑当中介,分别与两台电脑相连. 在修复的过程中,工作者会有两种操作,修复电脑和询问电脑a和电脑b是否相连.当询问的时候输出答案. 因为输入数据很大,需要快速判断电脑a和电脑b相连,所以自然想到用并查集. 初始时候 全部电

poj2236 Wireless Network 并查集简单应用

Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the network were all broken. The computers

poj2236(Wireless Network)并查集

Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the network were all broken. The computers

poj2236 基础并查集

题目链接:http://poj.org/problem?id=2236 题目大意:城市网络由n台电脑组成,因地震全部瘫痪,现在进行修复,规定距离小于等于d的电脑修复之后是可以直接相连 进行若干操作,O a,修复编号为a的电脑,S a,b  询问a,b电脑能否联系 思路分析:并查集,只是和并条件变了,首先要已经被修复(vis数组)其次距离要小于d,并查集搞完之后 询问的时候只需要看他们是不是有着相同的根节点即可. 代码: #include <iostream> #include <cstd

poj2236和poj1611并查集问题

POJ 2236 问在计算机坏了,修复若干,问检测两台是否能连通 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int N = 1005; struct Point { int x,y; }; Point p[N]; int repaired[N]; int pre[N],rank[N]; int dist(Point A,Point B) {

POJ2236 Wireless Network 【并查集】

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