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
'코딩테스트' 카테고리의 다른 글
[백준] 1516번 '게임 개발' - Java (0) | 2023.08.08 |
---|---|
[백준] 1423번 '원숭이 키우기' - Java (1) | 2023.08.07 |
[백준] 1647번 '도시 분할 계획' - Java (1) | 2023.08.05 |
[백준] 1424번 '새 앨범' - Java (1) | 2023.08.04 |
[백준] 1600번 '말이 되고픈 원숭이' - Java (1) | 2023.08.03 |