求助:这段代码为什么过不了?
查看原帖
求助:这段代码为什么过不了?
533343
xiuzhiyuan楼主2022/3/28 21:30

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

#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;
}
2022/3/28 21:30
加载中...