Cod sursa(job #1197381)

Utilizator c0rn1Goran Cornel c0rn1 Data 11 iunie 2014 20:04:23
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#define add push_back
#define inf 0x3f3f3f3f

using namespace std;
int n, m;
int d[50005];
vector<pair<int,int> > v[50005];
priority_queue<pair<int,int> >q;

void Citire()
{
   int i, a, b, c;
   scanf("%d %d", &n, &m);
   for (i=1; i<=m; i++)
   {
      scanf("%d %d %d", &a, &b, &c);
      v[a].add(make_pair(c, b));
   }
}

void Init()
{
   int i;
   q.push(make_pair(0, 1));
   memset(d, inf, sizeof(d));
   d[1]=0;
}

void Solve()
{
   Init();
   pair<int,int> x;
   while(!q.empty())
   {
      x=q.top();
      q.pop();
      for (vector<pair<int,int> >::iterator it=v[x.second].begin(); it!=v[x.second].end(); ++it)
         if (d[it->second]>d[x.second]+it->first)
         {
            d[it->second]=d[x.second]+it->first;
            q.push(*it);
         }
   }
}

void Afis()
{
   int i;
   for (i=2; i<=n; i++)
      printf("%d ", d[i]);
}

int main()
{
   freopen("dijkstra.in", "r", stdin);
   freopen("dijkstra.out", "w", stdout);
   Citire();
   Solve();
   Afis();

   return 0;
}