Cod sursa(job #1862541)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 30 ianuarie 2017 01:10:51
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include <bits/stdc++.h>
using namespace std;
#define ios ios_base::sync_with_stdio(false);cin.tie(0);
#define setnow clock_t tStart=clock();
#define time (double)(clock() - tStart)/CLOCKS_PER_SEC;
typedef long long ll;
typedef long long int lli;
typedef pair < int, int> dbl;
const int maxInt = 1e9*2;
#define INF 1e9*2
const lli maxLong = 1e18*2;
//
int dist[50002];
vector < pair < int, int > > adj[50002];
priority_queue< pair <int, int> , vector < pair < int, int > > , greater < pair <int, int > > > heap;
int n, m;
int Dijkstra(int source){
    memset(dist, INF, sizeof(dist));
    dist[source] = 0;
    heap.push( make_pair(0, source));
    while(!heap.empty()){
            int node = heap.top().second;
            int lng = heap.top().first;
            heap.pop();
            if(lng != dist[node])
                    continue;
            for(int i = 0; i < adj[node].size(); i++){
                    int to = adj[node][i].first;
                    int length = adj[node][i].second;
                    if(dist[to] > dist[node] + length){
                            dist[to] = dist[node] + length;
                            heap.push( make_pair (dist[to], to));
                    }
            }
    }
}
int main(){
            freopen("dijkstra.in", "r", stdin);
            freopen("dijkstra.out", "w", stdout);
            scanf("%d %d", &n, &m);
            for(int i = 0; i < m; i++){
                    int a, b, price;
                    //cin >> a >> b >> price;
                    scanf("%d %d %d", &a, &b, &price);
                    adj[a].push_back( make_pair(b,price));
            }
            Dijkstra(1);
            for(int i = 2; i <= n; i++)
                if(dist[i] >= maxInt)
                    printf("%d ", 0);
                else
                    printf("%d ", dist[i]);
}