3
int countPaths(int n, vector<vector<int>> &roads) {5
vector<vector<pair<int, int>>> graph(n);6
for (auto &road : roads) {7
graph[road[0]].push_back({road[1], road[2]});8
graph[road[1]].push_back({road[0], road[2]});11
vector<long long> distance(n, LONG_MAX);12
vector<int> path(n, 0);14
priority_queue<pair<long long, int>, vector<pair<long long, int>>,15
greater<pair<long long, int>>>22
pair<long long, int> t = pq.top();25
for (auto &nbr : graph[t.second]) {26
long long vert = nbr.first;27
long long edge = nbr.second;29
if (distance[vert] > distance[t.second] + edge) {30
distance[vert] = distance[t.second] + edge;31
pq.push({distance[vert], vert});32
path[vert] = path[t.second] % mod;33
} else if (distance[vert] == t.first + edge) {34
path[vert] += path[t.second];