Cod sursa(job #890137)

Utilizator daniel.florinPitis Daniel-Florin daniel.florin Data 24 februarie 2013 21:17:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#include <deque>
#include <vector>
#include <algorithm>

using namespace std;

bool viz[50005];
int cost[50005];
int n,m,x,y,z;
vector<pair<int,int> > v[250005];
deque<int>Q;

void Dijkstra(int X)
{
    int a,b;
    viz[X] = true;
    Q.push_back(X);
    while(!Q.empty())
    {
        X = Q.front();
        for(int j=0; j<v[X].size(); j++)
        {
            a = v[X][j].first;
            b = v[X][j].second;
            if(!viz[a] || cost[X]+b <cost[a])
            {
                viz[a] = true;
                cost[a] = cost[X]+b;
                Q.push_back(a);
            }
        }
        Q.pop_front();
    }
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijktsra.out","w",stdout);
    scanf("%d %d", &n,&m);
    for(int i=1; i<=m; i++)
    {
        scanf("%d %d %d",&x,&y,&z);
        v[x].push_back(make_pair(y,z));
    }
    Dijkstra(1);
    for(int i=2; i<=n; i++)
    printf("%d ",cost[i]);
    return 0;
}