POJ2236并查集

来源:互联网 发布:共享wifi软件 编辑:程序博客网 时间:2024/05/25 19:58
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());}}

0 0
原创粉丝点击