现在怎么还在UKE?
  • 板块CF20C Dijkstra?
  • 楼主Fwio_
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/6/6 20:48
  • 上次更新2023/10/23 13:48:25
查看原帖
现在怎么还在UKE?
965238
Fwio_楼主2023/6/6 20:48

#code:

#include<iostream>
#include<queue>
#include<cstring>
#define N 1000009
using namespace std;
typedef pair<long long ,long long> PII;
int h[N] , e[N] , ne[N] , idx;
long long dist[N] , w[N];
long long Prev[N] , _prev[N] , _idx;
int n , m , vis[N];
void add(int u , int v , int val){
	w[idx] = val;
	e[idx] = v;
	ne[idx] = h[u];
	h[u] = idx++;
}
int _scanf(){
	int x = 0 , op = 1;
	char f = getchar();
	while(f < '0' || f > '9')
		if(f == '-') op = -1 , f = getchar();
	while(f >= '0' && f <= '9')
		x = (x << 3) + (x << 1) + f - 48 , f = getchar();
	return x * op;
}
void dijkstra(){
	memset(dist , 0x3f3f , sizeof dist);
	dist[1] = 0;
	priority_queue<PII , vector<PII> , greater<PII> > heap;
	heap.push({0 , 1});
	_prev[_idx] = 1;
	while(heap.size()){
		PII k = heap.top();
		heap.pop();
		int ver = k.second;
		int distance = k.first;
		if(vis[ver]) continue;
		vis[ver] = 1;
		for(int i = h[ver];i != -1;i = ne[i]){
			if(dist[e[i]] > distance + w[i]){
				dist[e[i]] = distance + w[i];
				heap.push({dist[e[i]] , e[i]});
				Prev[e[i]] = ver;
			}
		}
	}
}
int main(){
	memset(h , -1 , sizeof h);
	n = _scanf();
	m = _scanf();
	while(m--){
		int u , v , val;
		u = _scanf();
		v = _scanf();
		val = _scanf();
		add(u , v , val);
		add(v , u , val);
	}
	dijkstra();
	bool st = false;
	for(int i = n;i != -1;i = Prev[i]){
		_prev[_idx++] = i;
		if(i == 1){
			st = true;
			break;
		}
	}
	if(!st)
		puts("-1");
	else
		for(int i = _idx - 1;i >= 0;i--)	
			cout << _prev[i] << " ";
	return 0;
}
2023/6/6 20:48
加载中...