This has more points, is sparse graph.
So we use adjacency table to save.
The pic can not upload successful…
Problem in AcWing
same , turn the adjacency matrix to table.
And using the PriorityQueue to save.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(System.out);
static int N = 100010, n, m;
static int e[] = new int[N], ne[] = new int[N], w[] = new int[N], h[] = new int[N], idx;
static long dist[] = new long[N];
static boolean st[] = new boolean[N];
static PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
public static void add(int a, int b, int c) {
e[idx] = b;
ne[idx] = h[a];
w[idx] = c;
h[a] = idx++;
}
public static void main(String[] args) throws IOException {
String s[] = br.readLine().split(" ");
n = Integer.parseInt(s[0]);
m = Integer.parseInt(s[1]);
Arrays.fill(h, -1);
Arrays.fill(dist, Integer.MAX_VALUE);
for (int i = 0; i < m; i++) {
s = br.readLine().split(" ");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
int c = Integer.parseInt(s[2]);
add(a, b, c);
}
pw.println(dijkstra());
pw.flush();
br.close();
}
private static int dijkstra() {
queue.add(new int[]{0, 1});
dist[1] = 0;
while (!queue.isEmpty()) {
int temp[] = queue.peek();
queue.poll();
int distance = temp[0], ver = temp[1];
if (st[ver]) continue;
for (int i = h[ver]; i != -1; i = ne[i]) {
int j = e[i];
if (dist[j] > distance + w[i]) {
dist[j] = distance + w[i];
queue.offer(new int[]{(int) dist[j], j});
}
}
}
if (dist[n] == Integer.MAX_VALUE) return -1;
return (int) dist[n];
}
}