#include #define pii pair #define MAXN 10010 using namespace std; const int MOD = (int)1e9+7; vector grafo[MAXN]; int dist[MAXN], pai[MAXN], rota[MAXN], min_vrota[MAXN], max_vrota[MAXN]; /* rota[i]: nro de caminhos minimos para chegar no vértice i min_vrota[i]: menor nro de vértices dentre as menores rotas até i max_vrota[i]: maior nro de vértices dentre as menores rotas até i */ void dijkstra(int s){ set q; q.insert({0,s}); dist[s] = 0; rota[s] = 1; min_vrota[s] = 1; max_vrota[s] = 1; while(!q.empty()){ int v = q.begin()->second; q.erase(q.begin()); for(auto [w,u] : grafo[v]){ if(dist[v]+w < dist[u]){ q.erase({dist[u],u}); dist[u] = dist[v]+w; q.insert({dist[u],u}); pai[u] = v; rota[u] = rota[v]; min_vrota[u] = min_vrota[v]+1; max_vrota[u] = max_vrota[v]+1; }else if(dist[v]+w == dist[u]){ rota[u] += rota[v]; rota[u] %= MOD; min_vrota[u] = min(min_volta[u],min_vrota[v]+1); max_vrota[u] = max(max_vrota[u],max_vrota[v]+1); } } } } int main(){ int n, m; scanf("%d %d", &n, &m); for(int i = 0; i < m; i++){ int a, b, c; scanf("%d %d %d", &a, &b, &c); grafo[a].push_back({c,b}); } // }