Cod sursa(job #2378093)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 11 martie 2019 17:27:14
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
#define pii pair<int,int>
#define vii vector<pii>
#define S second
#define F first
#define INF 0xfffffff
#define MAXN 50010 
using namespace std;

int n,m;
int Vl[MAXN];
vii A[MAXN];

void Dijkstra(int s){
	priority_queue <pii,vii,greater<pii> > pq;
	pq.push({0,s});
	for(int i=1;i<=n;i++)
		if(s!=i)
			Vl[i]=INF;
		else Vl[i]=0;
	while(!pq.empty()){
		pii c;
		c.F=pq.top().S;
		c.S=pq.top().F;
		pq.pop();
		if(c.S>Vl[c.F])continue;
		for(int i=0;i<A[c.F].size();i++){
			if(Vl[c.F]+A[c.F][i].S<Vl[A[c.F][i].F]){
				Vl[A[c.F][i].F]=Vl[c.F]+A[c.F][i].S;
				pq.push({Vl[c.F]+A[c.F][i].S,A[c.F][i].F});
			}
		}
	}
}

int main(){
	ifstream cin("dijkstra.in");
	ofstream cout("dijkstra.out");
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int a,b,d;
		cin>>a>>b>>d;
		A[a].push_back({b,d});
	}
	Dijkstra(1);
	for(int i=2;i<=n;i++){
		if(Vl[i]!=INF)
		cout<<Vl[i]<<' ';
		else cout<<"0 ";
	}
	return 0;
}