백준 1916번 최소비용 구하기

veloger·2023년 1월 25일
0


package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class BaekJoonQ1916_P324_Q57 {
	static class Node implements Comparable<Node>{
		int node;
		int value;
		
		public Node(int node, int value) {
			this.node=node;
			this.value=value;
		}

		@Override
		public int compareTo(Node n) {
			// TODO Auto-generated method stub
			return this.value-n.value;
		}
		
		
	}
	
	static ArrayList<Node>[] list;
	static int INF=Integer.MAX_VALUE >> 2;
	
	private static int dijkstra(int node, int startNode, int goalNode) {
		// TODO Auto-generated method stub
		int dist[] =new int[node+1];
		Arrays.fill(dist, INF);
		dist[startNode] = 0 ;
		
		PriorityQueue<Node> qu = new PriorityQueue<>();
		
		qu.add(new Node(startNode,0));
		
		while(!qu.isEmpty()) {
			Node crnt = qu.poll();
			
			if (dist[crnt.node] < crnt.value) continue;
			for(Node next : list[crnt.node]) {
				if(dist[next.node] > dist[crnt.node] + next.value) {
					dist[next.node] =dist[crnt.node] + next.value;
					qu.add(new Node(next.node, dist[next.node]));
				}
			}
		}

		return dist[goalNode];
	}
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		
		int node = Integer.parseInt(br.readLine());
		int edge= Integer.parseInt(br.readLine());
		
		list =new ArrayList[node+1];
		for(int i =1;i<list.length;i++) {
			list[i] = new ArrayList<>();
		}
		for(int i=0;i<edge;i++) {
			st =new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int v = Integer.parseInt(st.nextToken());
			list[a].add(new Node(b,v));
		}
		
		st =new StringTokenizer(br.readLine());
		int startNode=Integer.parseInt(st.nextToken());
		int goalNode=Integer.parseInt(st.nextToken());
		
		int result = dijkstra(node, startNode, goalNode);
		bw.write(Integer.toString(result));
		bw.flush();
	}
	

}

0개의 댓글