T了,求帮
  • 板块CF20C Dijkstra?
  • 楼主liyuteng
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/30 19:32
  • 上次更新2023/11/2 16:55:44
查看原帖
T了,求帮
807403
liyuteng楼主2023/9/30 19:32
#include<bits/stdc++.h>
#define maxn 100005
#define int long long
using namespace std;
int head[maxn];
struct node {
	int to,next,w;
	bool operator < (const node& hhh) const{ return w>hhh.w; }
} a[maxn];
int cnt;
void add(int u,int v,int w) {
	a[++cnt].to=v;
	a[cnt].next=head[u];
	a[cnt].w=w;
	head[u]=cnt;
}
int a1[100001];
int n,m;
int mmin=1e12;
int mminc;
bool flag=0;
bool vis[100001];
int f[maxn];
int ans;
int dis[maxn];
int pos[maxn];
priority_queue<pair<long long,int> > q;
void dji(int p){
    memset(dis,0x3f,sizeof(dis));
    dis[p]=0; 
    q.push(make_pair(0,p));
    while(!q.empty()){
        int s=q.top().second;
        q.pop();
        if(vis[s]){
            continue;
        }
        vis[s]=1;
        for(int i=head[s];i;i=a[i].next){
            int k=a[i].to;
            if(dis[k]>dis[s]+a[i].w){
                dis[k]=dis[s]+a[i].w;
                q.push(make_pair(-dis[k],k));
                pos[k]=s;
            }
        }
    }
}
signed main() {
	cin>>n>>m;
	for(int i=1; i<=m; i++) {
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	dji(1);
	int now=1;
	if(dis[n]==0x3f){
		cout<<"-1"<<endl;
		exit(0);
	} 
	for(int i=n;i;i=pos[i]){
		a1[now++]=i;
		if(i==1){
			flag=1;
		}
	}
	if(flag==0)
	cout<<"-1"<<endl;
	else
	for(int i=now-1;i>=1;i--){
		cout<<a1[i]<<" ";
	}
	return 0;
}
2023/9/30 19:32
加载中...