本蒟蒻的代码,样例点过了,不知道哪里错了
而且我也不明白,明明每一个答案都小于等于 n 啊,而且 n 也没有爆int,为什么别人说要开long long啊
#include<bits/stdc++.h>
#define ll long long
using namespace std;
priority_queue <int> q;
const int N=1e5+5,INF=2147483647;
int dis[N],head[N],pre[N];
int n,m,tot,cnt;
ll ans[N];
bool vis[N];
bool flag;
struct node{
int to,w,next;
}Edge[N];
inline int read()
{
int x=0;
bool w=0;
char c=getchar();
while(!isdigit(c))
w|=c=='-',c=getchar();
while(isdigit(c))
x=(x<<1)+(x<<3)+(c^48),c=getchar();
return w?-x:x;
}
inline void SPFA()
{
q.push(1);vis[1]=1;
while(!q.empty())
{
int u=q.top();
q.pop();vis[u]=0;
for(register int i=head[u];i;i=Edge[i].next)
{
int v=Edge[i].to,w=Edge[i].w;
if(dis[u]+w<dis[v])
{
dis[v]=dis[u]+w;
pre[v]=u;
if(!vis[v])
vis[v]=1,q.push(v);
}
}
}
}
inline void add(int u,int v,int w)
{
Edge[++tot].w=w;
Edge[tot].to=v;
Edge[tot].next=head[u];
head[u]=tot;
}
signed main()
{
n=read(),m=read();
for(register int i=1;i<=n;++i)
dis[i]=INF;dis[1]=0;
for(register int i=1;i<=m;++i)
{
int u=read(),v=read(),w=read();
add(u,v,w);add(v,u,w);
}
SPFA();
for(register int i=n;i>=1;i=pre[i])
{
ans[++cnt]=i;
if(i==1) flag=1;
}
if(!flag)
{
printf("-1");
return 0;
}
for(register int i=cnt;i>=1;--i)
printf("%lld ",ans[i]);
return 0;
}