使用类型
有向无环图
void solve(){
int n, m; cin >> n >> m;
vector<pii> G[m + 1];
vi cnt(n + 1);
rep(i, 1, m){
int u, v, w; cin >> u >> v >> w;
G[u].push_back({v, w});
cnt[v] ++;
}
vi dis(n + 1, INF);
dis[1] = 0;
queue<int> q;
rep(i, 1, n){
if(!cnt[i]) q.push(i);
}
while(q.size()){
int u = q.front();
q.pop();
for(auto [v, w] : G[u]){
if(dis[v] > dis[u] + w)
dis[v] = dis[u] + w;
cnt[v] --;
if(!cnt[v])
q.push(v);
}
}
cout << dis[n] << endl;
return;
}