Cod sursa(job #1705409)

Utilizator ElionIonescu Elena Elion Data 20 mai 2016 15:34:11
Problema Paduri de multimi disjuncte Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.41 kb
package Disjoint;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;



public class Main {
	
	public static ArrayList<ArrayList<Integer>> listaAdj = new ArrayList<ArrayList<Integer>>();
	public static ArrayList<Integer> parents = new ArrayList<Integer>();
	    public static void main(String[] Args)
	    {
	        try
	        {
	        	BufferedReader bf = new BufferedReader(new FileReader("disjoint.in"));
	        	
	           
	            PrintWriter out = new PrintWriter ( "disjoint.out") ;
	            String tmp[] = bf.readLine().split(" ");
	            int n = Integer.parseInt(tmp[0]);
	            int m = Integer.parseInt(tmp[1]);
	            
	            
	         
	           
	            for(int i = 0; i<n; i++){
	            	listaAdj.add(new ArrayList<Integer>());
	            	parents.add(i+1);
	            }
	            
	            for(int i = 0; i<m; i++){
	            	tmp = bf.readLine().split(" ");
	            	int comanda = Integer.parseInt(tmp[0]);
	            	int nod1 = Integer.parseInt(tmp[1]);
	            	int nod2 = Integer.parseInt(tmp[2]);
	            	
	           
	            	if( comanda == 1){
	            		union(nod1, nod2);
	            	}
	            	else{
	            		int findParent1 = findParent(nod1);
	            		int findParent2 = findParent(nod2);
	            		
	            		if(findParent1 == findParent2){
	            			out.println("DA");
	            		
	            		}
	            		else{
	            			out.println("NU");
	            		}
	            	}
	            	
	            }
	            
	           out.close();
	           bf.close();
	        }
	        catch (IOException E)
	        {
	            System.err.println("Eroare la citire/scriere");
	        }
	    }

		private static void union(int nod1, int nod2) {
			parents.set(nod1-1, nod2);
			
		}

		private static int findParent(int nod) {
			if(parents.get(nod-1) == nod) return nod;
			
			// Find the parent			
			while(parents.get(nod-1) != nod ){
				nod = parents.get(nod-1);
			}
			return nod;
		}
}