1
typedef pair<int, int> pii;4
int countRestrictedPaths(int n, vector<vector<int>> &edges) {5
unordered_map<int, vector<pair<int, int>>> gp;6
for (auto &edge : edges) {7
gp[edge[0]].push_back({edge[1], edge[2]});8
gp[edge[1]].push_back({edge[0], edge[2]});11
vector<int> dist(n + 1, INT_MAX);12
priority_queue<pii, vector<pii>, greater<pii>> pq;21
for (auto &to : gp[u]) {22
v = to.first, w = to.second;23
if (dist[v] > dist[u] + w) {24
dist[v] = dist[u] + w;25
pq.push({dist[v], v});29
vector<int> dp(n + 1, -1);30
return dfs(gp, n, dp, dist);33
int dfs(unordered_map<int, vector<pair<int, int>>> &gp, int s, vector<int> &dp,37
if (dp[s] != -1) return dp[s];38
int sum = 0, weight, val;39
for (auto &n : gp[s]) {43
sum = (sum % mod + dfs(gp, n.first, dp, dist) % mod) % mod;46
return dp[s] = sum % mod;