幼儿园小班小朋友敲dijsktra求调
  • 板块灌水区
  • 楼主一咕咕一
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/1/10 13:28
  • 上次更新2025/1/10 20:10:43
查看原帖
幼儿园小班小朋友敲dijsktra求调
772815
一咕咕一楼主2025/1/10 13:28

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;
}

https://www.luogu.com.cn/record/197576339

2025/1/10 13:28
加载中...