Cod sursa(job #2447826)

Utilizator hellhereHell here hellhere Data 14 august 2019 19:02:50
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
# pragma GCC optimize("Ofast")
# pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define forn(i,a,b) for (int i = a; i <= b; i++)
#define fi(i,a,b) for (int i = a; i < b; i++)
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define rc(s) return cout<<s,0
#define er erase
#define in insert
#define pi pair <int, int>
#define pii pair <pi, pi>
# define sz(x) (int)((x).size())
int n,m;

vector<pi>v[50005];
set<pi>sett;
bool viz[50005];
int dis[50005];

void dfs(int nod){
	viz[nod]=1;
	fi(i,0,sz(v[nod])){
	
		if(!viz[v[nod][i].F]){
		viz[v[nod][i].F]=1;
		sett.in(mp(v[nod][i].S+dis[nod], v[nod][i].F));
		dis[v[nod][i].F]=v[nod][i].S+dis[nod];
		
		}else{
			if(v[nod][i].S+dis[nod]<dis[v[nod][i].F]){
				sett.er(mp(dis[v[nod][i].F], v[nod][i].F));
				sett.in(mp(v[nod][i].S+dis[nod],v[nod][i].F));
				dis[v[nod][i].F]=dis[nod]+v[nod][i].S;
			}
		}
	}	
}


int32_t main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	ifstream cin("dijkstra.in");
	ofstream cout("dijkstra.out");
	cin>>n>>m;
	forn(i,1,m){
		int x,y,z;
		cin>>x>>y>>z;
		v[x].pb(mp(y,z));	
	} 
	sett.in(mp(0,1));
	while(!sett.empty()){
		int x=(*sett.begin()).S;
		sett.erase(sett.begin());
		dfs(x);
	}  
	forn(i,2,n)cout<<dis[i]<<' ';
	
return 0;
}