珂爱萌新刚学 Dij,只有 50,求找错
查看原帖
珂爱萌新刚学 Dij,只有 50,求找错
100910
⚡小林子⚡海棠喵楼主2020/6/27 10:44

RT

只能过 3 个点

#1、#3、#4 都错了

提交记录

Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s,u,v,w,dis[100001];
bool vis[100001];
struct Node{
	int v,d;
	bool operator < (const Node &rhs) const {
		return d>rhs.d;
	}
}vex;
vector<Node>G[100001];
void dij(int x){
	memset(dis,0x3f,sizeof dis);
	memset(vis,0,sizeof vis);
	dis[x]=0;
	priority_queue<Node>pq;
	vex.v=x;vex.d=0;
	pq.push(vex);
	while(!pq.empty()){
		vex=pq.top();pq.pop();
		int v=vex.v,d=vex.d;
		if(vis[v]) continue;
		vis[v]=1;
		for(int i=0;i<G[v].size();i++){
			int j=G[v][i].v;
			if(!vis[j]&&dis[v]+G[v][i].d<dis[j]){
				dis[j]=dis[v]+G[v][i].d;
				vex.v=j;vex.d=dis[j];
				pq.push(vex);
			}
		}
	}
} 
signed main(){
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		vex.v=u;vex.d=w;
		G[v].push_back(vex);
		vex.v=v;
		G[u].push_back(vex);
	}
	dij(s);
	for(int i=1;i<=n;i++)
		printf("%d ",dis[i]);
	return 0;
}
2020/6/27 10:44
加载中...