求助:这段代码为什么过不了?

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

xiuzhiyuan @ 2022-03-28 21:30:19

哪位大神能看出来这段代码为什么不能过?

#include<iostream>
#include<queue>
using namespace std;
typedef pair<int,int> PII;
const int N=100010,M=200010;
int n,m,x,y,z,s,h[N],e[M],ne[M],w[N],idx=1,dis[N];
bool vis[N];
void add(int x,int y,int z){
    w[idx]=z,e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void dijstra(){
    for(int i=1;i<=n;i++)
        dis[i]=0x7fffffff;
    dis[s]=0;
    priority_queue<PII,vector<PII>,greater<PII>>q;
    q.push({0,s});
    while(q.size()){
        PII t=q.top();
        q.pop();
        if(vis[t.second])
            continue;
        vis[t.second]=true;
        for(int i=h[t.second];i;i=ne[i])
            if(dis[e[i]]>t.first+w[i]&&!vis[e[i]]){
                dis[e[i]]=t.first+w[i];
                q.push({dis[e[i]],e[i]});
            }
    }
}
int main(){
    scanf("%d%d%d",&n,&m,&s);
    while(m--){
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
    }
    dijstra();
    for(int i=1;i<=n;i++)
        printf("%d ",dis[i]);
    return 0;
}

by FeelGood @ 2022-03-28 21:47:53

您的w[N]应该是w[M] 数据范围错了


by Perta @ 2022-03-28 21:56:00

@xiuzhiyuan 回复总是排版有问题,将问题私信发给你了


by xiuzhiyuan @ 2022-03-29 18:57:25

@FeelsGood 谢谢大佬,改完就过了。。。


|