单源最短路求助!
查看原帖
单源最短路求助!
754467
f_hxr_楼主2023/4/14 19:35

rt,一直WA TLE,有无大佬看看哪里错了QAQ

#include<bits/stdc++.h>
using namespace std;
int m,n,s,a,b,c,x;
int dis[1000001],vis[1000001];
int head[1000001],nxt[1000001],to[1000001],w[1000001],cnt;
void edge(int u,int v,int mon){
    nxt[++cnt]=head[u];head[u]=cnt;
    to[cnt]=v;w[cnt]=mon;
} 
int main(){
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++)dis[i]=1e9;
    for(int i=1;i<=m;i++)cin>>a>>b>>c,edge(a,b,c);
    dis[s]=0;x=s;
    while(!vis[x]){
        if(vis[x])continue;vis[x]=1;
        for(int i=head[x];i;i=nxt[i])
            dis[to[i]]=min(dis[to[i]],dis[x]+w[i]);
        int mn=1e9;
        for(int i=1;i<=m;i++)
            if(dis[to[i]]<mn&&!vis[i])mn=dis[i],x=i; 
    }
    for(int i=1;i<=n;i++) cout<<dis[i]<<" ";
    return 0;
}
2023/4/14 19:35
加载中...