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 谢谢大佬,改完就过了。。。