티스토리 뷰
https://www.acmicpc.net/problem/1976
1976번: 여행 가자
동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인
www.acmicpc.net
이 문제는 마지막 라인에 주어지는 노드들이 서로 연결되어 있는지를 판별하는 문제이다.
따라서 유니온 파인드 알고리즘으로 해결 가능하다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[] parents;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
parents = new int[N+1];
for (int i=1; i<=N; i++)
parents[i] = i;
for (int i=1; i<=N; i++) {
String[] line = br.readLine().split(" ");
for (int j=1; j<=N; j++) {
if (i == j)
continue;
// i, j 연결됨
if ("1".equals(line[j-1])) {
union(i, j);
}
}
}
// last line
String[] plans = br.readLine().split(" ");
int[] p = new int[plans.length];
for (int i=0; i<plans.length; i++) {
p[i] = Integer.parseInt(plans[i]);
}
boolean result = true;
int root = parents[p[0]];
for (int pp : p) {
if (parents[pp] != root) {
result = false;
break;
}
}
System.out.println(result ? "YES" : "NO");
}
private static int find(int value) {
// 기저: 루트값이면 반환
if (value == parents[value])
return value;
int root = find(parents[value]);
parents[value] = root;
return root;
}
private static void union(int a, int b) {
a = find(a);
b = find(b);
int newRoot = Math.min(a, b);
parents[a] = newRoot;
parents[b] = newRoot;
}
}
'알고리즘 > 알고리즘 연습' 카테고리의 다른 글
[BOJ 1043] 거짓말 Java 유니온 파인드 (1) | 2024.04.01 |
---|---|
[프로그래머스] 마법의 엘리베이터 (0) | 2023.04.04 |
[BOJ_1991] 트리 순회 (0) | 2023.04.02 |
[BOJ_2295] 세 수의 합 (0) | 2022.07.01 |
[BOJ_1021] 회전하는 큐 Java (덱) (0) | 2022.06.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- ORA-02289
- 생성자
- 투포인터 #알고리즘
- BAEKJOON
- Sequence
- 여행가자
- 탐욕법
- 후위순회
- 이진트리
- effectivejava
- 스레드
- 자바
- 백준1976
- greedy
- 빌더패턴
- 시퀀스가존재하지않습니다
- 정적팩터리메서드
- 전위순회
- deque
- 알고리즘
- 분리집합
- 백준
- 트리순회
- 유니온파인드
- 시퀀스
- Java
- 프로그래머스
- 중위순회
- BuilderPattern
- 이펙티브자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함