6
Pair(int node, int dist) {12
public int countPaths(int n, int[][] roads) {13
int mod = (int) Math.pow(10, 9) + 7;14
ArrayList<ArrayList<Pair>> adj = new ArrayList<>();15
int rows = roads.length;16
for (int i = 0; i < n; i++) adj.add(new ArrayList<Pair>());17
for (int i = 0; i < rows; i++) {18
int from = roads[i][0];20
int dis = roads[i][2];21
adj.get(from).add(new Pair(to, dis));22
adj.get(to).add(new Pair(from, dis));24
PriorityQueue<Pair> pq = new PriorityQueue<>((aa, bb) -> aa.dist - bb.dist);25
pq.add(new Pair(0, 0));26
long[] ways = new long[n];28
int[] dist = new int[n];29
Arrays.fill(dist, Integer.MAX_VALUE);31
while (!pq.isEmpty()) {35
for (Pair pa : adj.get(node)) {36
if ((dis + pa.dist) < dist[pa.node]) {37
ways[pa.node] = ways[node];38
dist[pa.node] = dis + pa.dist;39
pq.add(new Pair(pa.node, dist[pa.node]));40
} else if ((dis + pa.dist) == dist[pa.node]) {41
ways[pa.node] += ways[node];42
ways[pa.node] = ways[pa.node] % mod;46
return (int) ways[n - 1];