본문 바로가기
코딩테스트

[백준] 1976번 '여행 가자' - Java

by CuckooBird 2023. 8. 6.

https://www.acmicpc.net/problem/1976

 

1976번: 여행 가자

동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인

www.acmicpc.net


문제


코드

import java.io.*;
import java.util.*;

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	private static int[] parent;
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		int m = Integer.parseInt(bf.readLine());
		
		parent = new int[n];
		for(int i = 0 ; i < n ; i++) {
			parent[i] = i;
		}
		
		StringTokenizer st;
		for(int i = 0 ; i < n ; i++) {
			st = new StringTokenizer(bf.readLine());
			for(int j = 0 ; j < n ; j++) {
				int tmp = Integer.parseInt(st.nextToken());
				if(tmp == 1) union_root(i, j);
			}
		}
		
		st = new StringTokenizer(bf.readLine());
		int start = find_root(Integer.parseInt(st.nextToken()) - 1);
		for(int i = 0 ; i < m - 1 ; i++) {
			int now = Integer.parseInt(st.nextToken()) - 1;
			if(start != find_root(now)) {
				bw.write("NO");
				
				bf.close();
				bw.flush();
				bw.close();
				return;
			}
		}
		
		bw.write("YES");
		
		bf.close();
		bw.flush();
		bw.close();
	}
	
	private static int find_root(int x) {
		if(x == parent[x]) return x;
		return parent[x] = find_root(parent[x]);
	}
	
	private static void union_root(int x, int y) {
		x = find_root(x);
		y = find_root(y);
		
		if(x != y) {
			parent[x] = y;
		}
	}
}

Search

https://steady-coding.tistory.com/109