链接:
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> using namespace std; #define N 1005 int n, f[N], a[N][2], repair[N]; int Find(int x) { if(f[x]!=x) f[x] = Find(f[x]); return f[x]; } double Dis(int x, int y) { return sqrt(double((a[x][0]-a[y][0])*(a[x][0]-a[y][0])+(a[x][1]-a[y][1])*(a[x][1]-a[y][1]))); } int main() { double d; int i, x, y, len=0; char ch; memset(repair, 0, sizeof(repair)); memset(a, 0, sizeof(a)); scanf("%d%lf", &n, &d); for(i=0; i<n; i++) { f[i]=i; scanf("%d%d", &a[i][0], &a[i][1]); } f[n]=n; while(cin>>ch) { if(ch=='O') { scanf("%d", &x); x--; repair[len++]=x; for(i=0; i<len-1; i++) { if(repair[i]!=x && Dis(repair[i], x)<=d) f[Find(repair[i])]=Find(x); } } if(ch=='S') { scanf("%d%d", &x, &y); x--, y--; if(Find(x)==Find(y)) printf("SUCCESS "); else printf("FAIL "); } } return 0; }