Cod sursa(job #655988)

Utilizator 1994Barbulescu Daniel 1994 Data 3 ianuarie 2012 18:25:18
Problema Algoritmul lui Dijkstra Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#define N 50005
using namespace std;

struct nod{
    int y,d;
};

vector <nod> G[N];
queue <int> C;
int n,m;
int viz[N],dist[N];

void read()
{
    int x;
    nod t;
    scanf("%d %d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d %d %d",&x,&t.y,&t.d);
        G[x].push_back(t);
    }
}

void init()
{
    for (int i=2;i<=n;i++)
        dist[i]=10100;
}


void dijkstra()
{
    C.push(1);
    while (!C.empty())
    {
        int u=C.front();
        if (dist[u]!=10100)
        {
            for (int i=0;i<G[u].size();i++)
            {
                int a=G[u][i].y;
                int b=G[u][i].d;
                if (dist[a]>dist[u]+b)
                {
                    dist[a]=dist[u]+b;
                    C.push(a);
                }
            }
        }
        C.pop();
    }
}

void print()
{
    for (int i=2;i<=n;i++)
        if (dist[i]!=10100)
            printf("%d ",dist[i]);
        else
            printf("0 ");
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    read();
    init();
    dijkstra();
    print();
    return 0;
}