Cod sursa(job #1462209)

Utilizator Burbon13Burbon13 Burbon13 Data 17 iulie 2015 13:17:55
Problema Paduri de multimi disjuncte Scor 40
Compilator java Status done
Runda Arhiva educationala Marime 1.48 kb
import java.util.*;
import java.io.*;

public class Main{
	
	public static int[] rang = new int[100005];
	public static int[] parinte = new int[100005];
	public static int n, m;
	
	public static void main(String[] args){
		
		Scanner reader = null;
		PrintWriter writer = null;
		
		try {
			reader = new Scanner(new FileInputStream("disjoint.in"));
		} catch (FileNotFoundException e) {
			System.out.println("Fisier intrare lipsa!");
			return;
		}
		
		try{
			writer = new PrintWriter("disjoint.out");
		} catch (FileNotFoundException e) {
			System.out.println("Fisier iesire lipsa!");
			return;
		}
		
		n = reader.nextInt();
		m = reader.nextInt();
		
		for(int i = 1; i <= n; ++i){
			parinte[i] = i;
			rang[i] = 1;
		}
		
		for(int i = 1; i <= m; ++i){
			int c, n1, n2;
			c = reader.nextInt();
			n1 = reader.nextInt();
			n2 = reader.nextInt();
			
			if(c == 1)
				uneste(gaseste(n1),gaseste(n2));
			else{
				if(gaseste(n1) == gaseste(n2))
					writer.println("DA");
				else
					writer.println("NU");
			}
		}
		
		writer.close();
		reader.close();
	}
	
	private static int gaseste(int x){
		int f = x;
		
		while(parinte[f] != f)
			f = parinte[f];
		
		while(x != parinte[x]){
			int aux = parinte[x];
			parinte[x] = f;
			x = aux;
		}
		
		return f;
	}
	
	private static void uneste(int x, int y){
		if(rang[x] > rang[y])
			parinte[y] = x;
		else
			parinte[x] = y;
		if(rang[x] == rang[y])
			++ rang[y];
	}
}