poj2236 并查集

专心和细心真的很重要                               

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<limits.h>
#include<math.h>
#include<queue>
#include<stack>
#include<vector>
#define max(a, b) a>b?a:b;
#define min(a, b) a<b?a:b;
using namespace std;
const int N = 1010;
int f[N], d;
struct node
{
int x, y, flag;
} p[N];
int Find(int x)
{
if(f[x]!=x)
f[x]=Find(f[x]);
return f[x];
}
int dist(int a, int b)
{
int q=p[a].x-p[b].x;
int w=p[a].y-p[b].y;
if(q*q+w*w<=d*d)
return 1;
else
return 0;
}
int main()
{
int n, m, a, b;
char ch;
scanf("%d%d", &n, &d);
for(int i=1; i<=n; i++)
{
scanf("%d%d", &p[i].x, &p[i].y);
p[i].flag=0;
f[i]=i;
}
while(cin >> ch)
{
if(ch=='O')
{
scanf("%d", &m);
p[m].flag=1;
for(int i=1; i<=n; i++)
{
if(i!=m&&p[i].flag==1&&dist(i, m)==1)
{
int k1=Find(m);
int k2=Find(i);
f[k1]=k2;
}
}
}
if(ch=='S')
{
scanf("%d%d", &a, &b);
int fa=Find(a);
int fb=Find(b);
if(fa==fb)
printf("SUCCESS ");
else
printf("FAIL ");
}
}
return 0;
}

原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4676359.html