1 条题解

  • 0
    @ 2025-10-4 15:59:13

    SPFA

    #include<bits/stdc++.h>
    using namespace std;
    void read(int &h){
        char o;
        int x=0,y=1;
        o=getchar_unlocked();
        while(!(o<='9'&&o>='0')){
            if(o=='-'){
                y=-1;
            }
            o=getchar_unlocked();
        }
        while(o<='9'&&o>='0'){
            x*=10;
            x+=o-'0';
            o=getchar_unlocked();
        }
        h=x*y;
        return ;
    }
    const int N=5e5+10;
    int n,m,s,u,v,w;
    vector<int> g[N],dis[N];
    queue<int> q;
    bool vis[N];
    int len[N];
    void start(){
        for(int i=1;i<=n;i++){
            len[i]=INT_MAX;
        }
        len[s]=0;
        vis[s]=1;
        q.push(s);  
        return ;
    }
    int main(){
        ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
        read(n);read(m);read(s);
        start();
        for(int i=1;i<=m;i++){
            read(u);read(v);read(w);
            g[u].push_back(v);
            dis[u].push_back(w);
        }
        while(!q.empty()){
            int x=q.front();
            q.pop();
            vis[x]=0;
            for(int i=0;i<g[x].size();i++){
                int now=g[x][i];
                if(len[now]>len[x]+dis[x][i]){
    	 		    if(!vis[now]){
                        q.push(now);
                        vis[now]=true;
                    }
    			    len[g[x][i]]=len[x]+dis[x][i];
                }
            }
        }
        for(int i=1;i<=n;i++){
            if(len[i]!=INT_MAX){
                cout<<len[i];
            }
            else{
                cout<<2147483647;
            }
            cout<<" ";
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    7401
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    220
    已通过
    41
    上传者