https://www.luogu.com.cn/problem/P4779
My code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, s;
class E
{
public:
int u, w;
};
class D
{
public:
int dis, id;
};
vector<E> v[1000007];
int dis[1000007], vis[1000007];
bool operator<(const D &a, const D &b) { return b.dis < a.dis; }
priority_queue<D> q;
void dijkstra(int s)
{
for (int i = 1; i <= n; i++)
dis[i] = (1 << 31) - 1;
dis[s] = 0;
q.push({0, s});
while (!q.empty())
{
D tmp = q.top();
q.pop();
int u = tmp.id;
for (auto x : v[u])
if (dis[x.u] > dis[u] + x.w)
{
dis[x.u] = dis[u] + x.w;
q.push({dis[x.u], x.u});
}
}
}
signed main()
{
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
cin >> n >> m >> s;
for (int i = 1; i <= n; i++)
{
int x, y, z;
cin >> x >> y >> z;
v[x].push_back({y, z});
}
dijkstra(s);
for (int i = 1; i <= n; i++)
cout << dis[i] << ' ';
return 0;
}