Dev.baelanche

[백준 1976] 여행 가자 본문

Data Structure & Algorithm/PS - JAVA

[백준 1976] 여행 가자

baelanche 2019. 6. 17. 21:51
반응형

 

유니온파인드 문제이다.

 

두 도시의 연결정보가 주어지면 union 연산을 한다.

여행계획이 주어졌을때 매 도시마다 find 연산을 하여 루트가 모두 같으면 YES 하나라도 다르면 NO를 출력한다.

 

public class Main {
    
    static int a[];
    
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        
        a = new int[n];
        Arrays.fill(a, -1);
        
        st = new StringTokenizer(br.readLine());
        int m = Integer.parseInt(st.nextToken());
        for(int i=0; i<n; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<n; j++) {
                int c = Integer.parseInt(st.nextToken());
                if(c == 1) union(i, j);
            }
        }
        
        st = new StringTokenizer(br.readLine());
        int result = find(Integer.parseInt(st.nextToken()) - 1);
        for(int i=0; i<m-1; i++) {
            if(find(Integer.parseInt(st.nextToken()) - 1) != result) {
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }
    
    public static int find(int n) {
        if(a[n] < 0) return n;
        a[n] = find(a[n]);
        return a[n];
    }
    
    public static void union(int x, int y) {
        x = find(x);
        y = find(y);
        if(x == y) return;
        a[x] += a[y];
        a[y] = x;
    }
}
반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 9461] 파도반 수열  (0) 2019.06.18
[백준 16562] 친구비  (0) 2019.06.17
[백준 1717] 집합의 표현  (0) 2019.06.17
[백준 16713] Generic Queries  (0) 2019.06.17
[백준 16507] 어두운 건 무서워  (0) 2019.06.17
Comments