Cod sursa(job #2711966)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 24 februarie 2021 23:31:28
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int INF = 1e9;

vector <pair <int, int>> adj[50001];

bitset <50001> u;

int d[50001], p[50001];
int N, M;

void dijkstra(int s) {
    for(int i = 1;i <= N;i++)
    	d[i] = INF, p[i] = -1;

    d[s] = 0;
    for(int i = 1;i <= N;i++){
        int v = -1;
        for(int j = 1;j <= N;j++){
            if(!u[j] && (v == -1 || d[j] < d[v]))
                v = j;
        }

	   	if(d[v] == INF)
	        break;

	    u[v] = 1;
	    for(auto edge : adj[v]){
	        int to = edge.first;
	        int len = edge.second;

	        if(d[v] + len < d[to]) {
	            d[to] = d[v] + len;
	            p[to] = v;
	        }
	    }
	}
}

int main(){

	fin >> N >> M;
	while(M--){
		int x, y, val;
		fin >> x >> y >> val;
		adj[x].emplace_back(y, val);
	}

	dijkstra(1);

	for(int i = 2;i <= N;i++)
		fout << d[i] << " ";
}