POJ 2236 Wireless Network(并查集)
2021-06-18 03:04
阅读:573
题目链接:[kuangbin带你飞]专题五 并查集 A - Wireless Network
题意
有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能。若两台电脑能相互通信。则有两种情况。一是他们之间的距离小于d。二是他们能够借助都可到达的第三台已修复的电脑。给出全部电脑的坐标位置,对其进行两种可能的操作,O x表示修复第x台。S x y表示推断x y之间是否能通信,若能输出SUCCESS,否则输出FALL。
思路
用并查集来保存电脑互相的连通情况。
每次修好电脑后,将它能够通信的电脑(距离满足且已修好)与它进行连通。
代码
#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
const int N = 1009;
int x[N], y[N], fa[N];
bool p[N];
vectorint> v[N];
int find(int x)
{
if(fa[x] == x)
return x;
return fa[x] = find(fa[x]);
}
int main()
{
int n, d;
char s[2];
scanf("%d%d", &n, &d);
for(int i=1; iscanf("%d%d", &x[i], &y[i]);
fa[i] = i;
}
for(int i=1; ifor(int j=i+1; jif(((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])) while(~scanf("%s", s))
{
int a, b;
if(s[0] == ‘O‘)
{
scanf("%d", &a);
p[a] = true;
for(int i=0; iif(p[v[a][i]])
{
b = find(v[a][i]);
fa[b] = a;
}
}
else
{
scanf("%d%d", &a, &b);
int ta = find(a);
int tb = find(b);
if(ta == tb)
printf("SUCCESS\n");
else
printf("FAIL\n");
}
}
return 0;
}
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:POJ 2236 Wireless Network(并查集)
文章链接:http://soscw.com/essay/95305.html
文章标题:POJ 2236 Wireless Network(并查集)
文章链接:http://soscw.com/essay/95305.html
评论
亲,登录后才可以留言!