
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int V, answer, second;
static ArrayList<int[]>[] list;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
V = Integer.parseInt(br.readLine());
list = new ArrayList[V + 1];
for (int i = 0; i <= V; i++) {
list[i] = new ArrayList();
}
for (int i = 1; i <= V; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
while (true) {
int end = Integer.parseInt(st.nextToken());
if (end == -1)
break;
int weight = Integer.parseInt(st.nextToken());
list[start].add(new int[]{end,weight});
}
}
dijkstra(1);
if (second != 1)
dijkstra(second);
System.out.println(answer);
}
private static void dijkstra(int start) {
boolean[] visit = new boolean[V + 1];
int[] arr = new int[V + 1];
PriorityQueue<int[]> q = new PriorityQueue<int[]>((a, b) -> a[1] - b[1]);
q.offer(new int[] { start, 0 });
visit[start] = true;
while (!q.isEmpty()) {
int[] now = q.poll();
int num = now[0];
ArrayList<int[]> adjList = list[num];
for (int[] cur : adjList) {
int nNum = cur[0];
int nCost = cur[1];
if(!visit[nNum] && arr[nNum] < arr[num] + nCost) {
arr[nNum] = arr[num] + nCost;
q.offer(new int[] {nNum, arr[nNum]});
visit[nNum] = true;
}
}
}
for (int i = 1; i <= V; i++) {
if(answer< arr[i]) {
answer = arr[i];
second = i;
}
}
}
}
[출처]
https://www.acmicpc.net/problem/1167
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 뱀과 사다리 게임 (0) | 2024.11.13 |
---|---|
[BAEKJOON] 알고스팟 (0) | 2024.10.04 |
[BAEKJOON] 트리 (0) | 2024.04.29 |
[BAEKJOON] 카드 구매하기 2 (0) | 2024.04.17 |
[BAEKJOON] LCS (0) | 2024.04.10 |
댓글