Cod sursa(job #1734912)

Utilizator xtreme77Patrick Sava xtreme77 Data 28 iulie 2016 15:18:15
Problema Paduri de multimi disjuncte Scor 100
Compilator java Status done
Runda Arhiva educationala Marime 4.62 kb
 
import java.util.*;
import java.io.*;
   
/***
 * 
 * @author Patrick
 *
 */
 
public class Main {
    public static int [ ] tata = new int [ 100999 ] ;
    public static int [ ] rang = new int [ 100999 ] ;
    public static void main(String[] args) throws FileNotFoundException {
    	InputReader cin=new InputReader (new FileInputStream ( "disjoint.in") );
        OutputWriter out=new OutputWriter(new FileOutputStream ( "disjoint.out"));
        int N = cin.readInt() ;
        int M = cin.readInt()  ; 
        for ( int i = 1 ; i <= N ; ++ i ) {
            tata [ i ] = i ; 
            rang [ i ] = 1 ; 
        }
        for ( int i = 1 ; i <= M ; ++ i ) {
            int Tip = cin.readInt()  ;
            if ( Tip == 1 ) {
                int X = cin.readInt()  ; 
                int Y = cin.readInt()  ; 
                unite ( X , Y ) ;
            }
            else {
                int X = cin.readInt()  ; 
                int Y = cin.readInt()  ; 
                if ( stramos ( X ) == stramos ( Y ) ) {
                    out.print( "DA\n" ); 
                }
                else {
                    out.print( "NU\n" );
                }
            }
        }
        //out.print(123);
        out.close() ;
         
    }
    public static int stramos ( int nod )
    {
        int R = nod ; 
        while ( R != tata [ R ] ) {
            R = tata [ R ] ;
        }
        while ( nod != tata [ nod ] ) {
            int aux = tata [ nod ] ; 
            tata [ nod ] = R ;
            nod = aux ; 
        }
        return R ;
    }
    public static void unite ( int x , int y )
    {
        x = stramos ( x ) ;
        y = stramos ( y ) ;
        if ( x == y ) {
            return ;
        }
        if ( rang [ x ] > rang [ y ] ) {
            rang [ x ] += rang [ y ] ;
            tata [ y ] = tata [ x ] ;
        }
        else {
            rang [ y ] += rang [ x ] ;
            tata [ x ] = tata [ y ] ;
        }
    }
}
class InputReader {
    
    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;
    private SpaceCharFilter filter;
 
    public InputReader(InputStream stream) {
        this.stream = stream;
    }
 
    public int read() {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars) {
            curChar = 0;
            try {
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }
 
    public int readInt() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int res = 0;
        do {
            if (c < '0' || c > '9')
                throw new InputMismatchException();
            res *= 10;
            res += c - '0';
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }
 
    public String readString() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        StringBuilder res = new StringBuilder();
        do {
            res.appendCodePoint(c);
            c = read();
        } while (!isSpaceChar(c));
        return res.toString();
    }
 
    public boolean isSpaceChar(int c) {
        if (filter != null)
            return filter.isSpaceChar(c);
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }
 
    public String next() {
        return readString();
    }
 
    public interface SpaceCharFilter {
        public boolean isSpaceChar(int ch);
    }
}
 
class OutputWriter {
    private final PrintWriter writer;
 
    public OutputWriter(OutputStream outputStream) {
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }
 
    public OutputWriter(Writer writer) {
        this.writer = new PrintWriter(writer);
    }
 
    public void print(Object...objects) {
        for (int i = 0; i < objects.length; i++) {
            if (i != 0)
                writer.print(' ');
            writer.print(objects[i]);
        }
    }
 
    public void printLine(Object...objects) {
        print(objects);
        writer.println();
    }
 
    public void close() {
        writer.close();
    }
 
    public void flush() {
        writer.flush();
    }
 
    }