wa#10大佬救救
  • 板块CF20C Dijkstra?
  • 楼主rome1
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/15 22:27
  • 上次更新2024/1/16 13:46:37
查看原帖
wa#10大佬救救
1159426
rome1楼主2024/1/15 22:27

RT

#include<bits/stdc++.h>
using namespace std;
long long n,m,u,v,w,head[100005],vis[100005],cnt,pre[100005],ans[100005];
struct node{
	long long w,u,v;
}edge[200005];
queue<int> q;
long long dis[100005];
void add(int u,int v,int w){
	edge[++cnt].v=v;
	edge[cnt].w=w;
	edge[cnt].u=head[u];
	head[u]=cnt;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	for(int i=1;i<=n;i++)dis[i]=1e15;
	q.push(1);
	dis[1]=0;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=head[x];i;i=edge[i].u){
			int y=edge[i].v;
			if(dis[y]>dis[x]+edge[i].w){
				dis[y]=dis[x]+edge[i].w;
				if(!vis[y])q.push(y),vis[y]=1;
				pre[y]=x;
			}
		}
	}
	if(dis[n]==1e15){
		cout<<"-1";
		return 0;
	}
	int tot=0;
	while(n!=1){
		ans[++tot]=n;
		n=pre[n];
	}
	ans[++tot]=1;
	for(int i=tot;i>=1;i--)cout<<ans[i]<<" ";
} 
2024/1/15 22:27
加载中...