52分求调

P4779 【模板】单源最短路径(标准版)

Ecesq_4 @ 2024-07-23 10:51:42

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,k;
struct node1
{
    int head;
    int to;
    int next;
    int qw;
}e[800010];
int dis[200010];
bool vis[200010];
struct node
{
    int x;
    int qw;
    bool operator <(const node &x)const 
    {
        return x.qw<qw;
    }
};
void add(int x,int y,int qe)
{
    k++;
    e[k].qw=qe;
    e[k].to=y;
    e[k].next=e[x].head;
    e[x].head=k;
}
priority_queue<node> q;
signed main()
{
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        int x,y,qe;
        cin>>x>>y>>qe;
        add(x,y,qe);
    }
    memset(dis,0x3f3f3f3f3f3f3f,sizeof(dis));
    dis[s]=0;
    vis[s]=1;
    q.push(node{s,0});
    while(!q.empty())
    {
        node w=q.top();
        q.pop();
        int xx=w.x;
        for(int i=e[xx].head;i;i=e[i].next)
        {
            int yy=e[i].to;
            if(dis[yy]>dis[xx]+e[i].qw)
            {
                dis[yy]=dis[xx]+e[i].qw;
                if(vis[yy]==0)
                {
                    vis[yy]=1;
                    q.push(node{yy,dis[yy]});
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<dis[i]<<' ';
    }
    return 0;
}

|