萌新求助
查看原帖
萌新求助
171513
Polariserist楼主2020/9/29 17:42

各位大佬帮忙看看,本蒟蒻的代码为什么只过了一个点

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int head[maxn],nxt[maxn],ver[maxn],wei[maxn],d[maxn];
bool vis[maxn];
int tot=0,n,m,s;
std::priority_queue<pair<int,int> >q;
void add(int x,int y,int z){
	ver[++tot]=y;
	wei[tot]=z;
	nxt[tot]=head[x];
	head[x]=tot;
}
void dijkstra(int s){
	memset(d,0x3f,sizeof(d));
	memset(vis,0,sizeof(vis));
	d[s]=0;
	q.push(make_pair(0,s));
	while(q.size()){
		int x=q.top().second;
		q.pop();
		if(vis[x])continue;
		vis[x]=1;
		for(int i=head[x];i;i=nxt[i]){
			int y=ver[i],z=wei[i];
			if(d[y]>d[x]+z){
				d[y]=d[x]+z;
				q.push(make_pair(-d[y],y));
			}
		}
	}
}
int main(){
	std::cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int x,y,z;
		std::cin>>x>>y>>z;
		add(x,y,z);
	}
	dijkstra(s);
	for(int i=1;i<=n;i++){
		std::cout<<d[i]<<" ";
	}
}
2020/9/29 17:42
加载中...