爆零求助
查看原帖
爆零求助
194761
Isenthalpic楼主2020/7/24 17:06
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e5+10;
const int M=4e5+10;
priority_queue<int,vector<int>,greater<int> >q;
int n,m,s,pre[N],now[N],to[N],val[N];
int dis[N],tot;bool vis[N];
void add(int x,int y,int z){
	pre[++tot]=now[x];
	to[tot]=y,val[tot]=z;
	now[x]=tot;
}
void dijkstra(int st){
	memset(dis,0x3f,sizeof(dis));
	dis[st]=0;q.push(st);
	while(!q.empty()){
		int u=q.top();q.pop();
		if(vis[u])continue;
		vis[u]=true;
		for(int i=now[u];i;i=pre[i]){
			int v=to[i],z=val[i];
			if(dis[u]+z<dis[v])
				dis[v]=dis[u]+z,q.push(v);
		}
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1,u,v,l;i<=m;i++){
		scanf("%d%d%d",&u,&v,&l);
		add(u,v,l);
	}
	dijkstra(s);
	for(int i=1;i<=n;i++)
		printf("%d ",dis[i]);
	return 0;
}
2020/7/24 17:06
加载中...