求条
查看原帖
求条
508593
DLDZD楼主2024/10/24 08:07
#include<bits/stdc++.h>
#define int long long
#define rr read()
using namespace std;
inline int read(){
    int x=0,f=1; char c=getchar_unlocked();
    while(c<'0'||c>'9'){
        if(c=='-') f=-1;
        c=getchar_unlocked();
    }
    while(c>='0'&&c<='9'){
        x=(x<<1)+(x<<3)+(c^48);
        c=getchar_unlocked();
    }
    return x*f;
}
void write(int i){
    if(i<0) putchar_unlocked('-'),i=-i ;
    if(i>9) write(i/10) ;
    putchar_unlocked((i%10)|0x30) ;
    return ;
}
struct edge{
    int ver,nxt;
    int edge;
}a[1000001];
int head[1000001],tot;
int d[1000001];
bool v[1000001];
int n=rr,m=rr,s=rr;;
priority_queue<pair<int,int> > q;
void add(int x,int y,int z){
    a[++tot].nxt=head[tot];
    head[x]=tot;
    a[tot].ver=y;
    a[tot].edge=z;
}
void dijkstra(){
    for(int i=0;i<=n;i++) d[i]=2147483647;
    d[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty()){
        int x=q.top().second;
        q.pop();
        if(v[x]) continue;
        v[x]=1;
        for(int i=head[x];i;i=a[i].nxt){
            if(d[a[i].ver]>d[x]+a[i].edge){
                d[a[i].ver]=d[x]+a[i].edge;
                if(!v[a[i].ver]){
                    q.push(make_pair(d[a[i].ver],a[i].ver));
                }
            }
        }
    }
    return ;
}
signed main(){
    for(int i=1;i<=m;i++){
        add(rr,rr,rr);
    }
    dijkstra();
    for(int i=1;i<=n;i++){
        write(d[i]);
        putchar(' ');
    }
    return 0;
}
2024/10/24 08:07
加载中...