import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
new Task().solve() ;
}
}
class Task {
InputReader in = new InputReader(System.in) ;
PrintWriter out = new PrintWriter(System.out) ;
class Point{
int x , y ;
Point(int x , int y){
this.x = x ;
this.y = y ;
}
int dist(Point o){
int dx = x - o.x ;
int dy = y - o.y ;
return dx * dx + dy * dy ;
}
}
Point[] p ;
int[] father ;
int getFather(int u){
if(u == father[u]) return u ;
else return father[u] = getFather(father[u]) ;
}
void union(int u , int v){
u = getFather(u) ;
v = getFather(v) ;
if(u != v) father[u] = v ;
}
void solve() {
int n = in.nextInt() ;
int d = in.nextInt() ;
d *= d ;
father = new int[n+1] ;
for(int i = 1 ; i <= n ; i++) father[i] = i ;
p = new Point[n+1] ;
for(int i = 1 ; i <= n ; i++)
p[i] = new Point(in.nextInt() , in.nextInt()) ;
List<Integer> repair = new ArrayList<Integer>() ;
while(in.hasNext()){
if("O".equals(in.next())){
int u = in.nextInt() ;
for(int v : repair){
if(p[u].dist(p[v]) <= d)
union(u, v) ;
}
repair.add(u) ;
}
else{
out.println(getFather(in.nextInt()) == getFather(in.nextInt()) ? "SUCCESS" : "FAIL") ;
}
//out.flush() ;
}
out.flush() ;
}
}
class InputReader {
public BufferedReader reader;
public StringTokenizer tokenizer;
public InputReader(InputStream stream) {
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = new StringTokenizer("");
}
private void eat(String s) {
tokenizer = new StringTokenizer(s);
}
public String nextLine() {
try {
return reader.readLine();
} catch (Exception e) {
return null;
}
}
public boolean hasNext() {
while (!tokenizer.hasMoreTokens()) {
String s = nextLine();
if (s == null)
return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
public BigInteger nextBigInteger() {
return new BigInteger(next());
}
}
POJ2236并查集
最新推荐文章于 2019-08-24 19:37:00 发布