单源最短路(dijkstra)时间优化板子
```cpp
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<utility>
#include<vector>
using namespace std;
struct Node
{
int v, dis;
};
const int maxn = 1e5+10;
const int INF = 1e9+10;
vector<Node> g[maxn];
int n,m,s;
int vis[maxn],d[maxn];
int dfs(int s)
{
priority_queue<pair<int,int>> q;
q.push(make_pair(0,s));
fill(d+1, d+n+1, INF);
d[s]=0;
while(!q.empty())
{
int u = q.top().second;
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(int i = 0; i < g[u].size(); i++)
{
int v = g[u][i].v;
if(d[u] + g[u][i].dis < d[v])
{
d[v] = d[u] + g[u][i].dis;
q.push(make_pair(-1*d[v], v));
}
}
}
}
int main()
{
freopen("r","in.txt",stdin);
scanf("%d%d%d",&n,&m,&s);
int u,v,w;
for(int i = 0; i < m; i++)
{
cin>>u>>v>>w;
g[u].push_back({v,w});
}
dfs(s);
cout<<d[1];
for(int i = 2 ; i <= n; i++)
{
cout<<" "<<d[i];
}
return 0;
}