专心和细心真的很重要
#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\n");
            else
                printf("FAIL\n");
        }
    }
    return 0;
}
原文:http://www.cnblogs.com/wazqWAZQ1/p/4676359.html