Boj 1976 여행 가자

Updated:

문제 링크 : 백준 https://www.acmicpc.net/problem/1976

public class Boj_1976 {
	 private static int[] parent;

	    public static void main(String[] args) {
	        Scanner sc = new Scanner(System.in);
	        int N = sc.nextInt(); //도시의 수
	        int M = sc.nextInt(); //여행계획 수
	        parent = new int[N+1]; // [해당노드] = 최상위부모값
	        for (int i=0; i<N; i++){
	            parent[i] = i;
	        }
	        for (int i = 1; i <= N; i++) { //경로잇기
	            for (int j = 1; j <= N; j++) {
	                int flag = sc.nextInt(); // 방문 여부
	                if (flag == 1) { //방문이라면 연결
	                    union(i, j);
	                }
	            }
	        }
	        //여행 계획
	        int prev = sc.nextInt();
	        for (int i = 0; i < M-1; i++) {
	            if (!isSameParent(prev,sc.nextInt())){
	                System.out.println("NO");
	                return;
	            }
	        }
	        System.out.println("YES");
	    }

	    private static void union(int x, int y) {
	        x = find(x);
	        y = find(y);
	        if (x != y) {
	            parent[y] = x;
	        }
	    }

	    private static int find(int x) {
	        if (parent[x] == x) {
	            return x;
	        } else {
	            return parent[x] = find(parent[x]);
	        }
	    }

	    private static boolean isSameParent(int x, int y) {
	        x = find(x);
	        y = find(y);
	        return x == y;
	    }
	}

Leave a comment