Cod sursa(job #1747085)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 24 august 2016 15:02:45
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;

vector < pair <int, int> > v[50005];
int dp[50005];
bool vis[50005];
const int INF = 1<<30;

int main(){
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int n,m,i,x,y,c;
    scanf("%d %d", &n, &m);
    for(i = 1;i <= m;i++){
        scanf("%d %d %d", &x, &y, &c);
        v[x].push_back({y, c});
    }
    for(i = 2;i <= n;i++){
        dp[i] = INF;
    }
    int mn,id;
    int all = n-1;
    while(all){
        mn = INF;
        for(i = 1;i <= n;i++){
            if(dp[i] < mn && vis[i] == 0){
                mn = dp[i];
                id = i;
            }
        }
        vis[id] = 1;
        for(auto it : v[id]){
            if(dp[it.first] > dp[id] + it.second){
                dp[it.first] = dp[id] + it.second;
            }
        }
        all--;
    }
    for(i = 2;i <= n;i++){
        printf("%d ",dp[i]);
    }
    return 0;
}