Cod sursa(job #1205115)

Utilizator gabib97Gabriel Boroghina gabib97 Data 5 iulie 2014 12:26:17
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define pp pair<int,int>
#define inf 100000000
using namespace std;
int n,m,x,y,c,s,i,d[50005],o[50005],z;
vector< pp > G[50005];
class comp
{
public:
 bool operator() (const int& a, const int& b)
  {
    return (d[a]>d[b]);
  }
};
priority_queue<int, vector<int> ,comp > Q;
int main()
{
    freopen ("dijkstra.in","r",stdin);
    freopen ("dijkstra.out","w",stdout);
    scanf("%i%i",&n,&m);
    s=3;
    for (i=1;i<=n;i++)
        if (i!=s)
        {
            d[i]=inf;
        }
    Q.push(s);
    for(i=1;i<=m;i++)
    {
        scanf("%i%i%i",&x,&y,&c);
        G[x].push_back(pp(y,c));
       // if (x==s) d[y]=c;
    }
    d[s] = 0; o[s]=1;
    while(!Q.empty())
    {
        x = Q.top();
        Q.pop();
        o[x]=1;
        z = G[x].size();
        for(i=0;i<z;i++)
        {
            y = G[x][i].first;
            c = G[x][i].second;
            if(d[y] > d[x] + c&&!o[y])
            {
                d[y] = d[x] + c;
                Q.push(y);
            }
        }
    }
    for(i=1; i<=n; i++)
        if (d[i]!=inf) printf("%i ",d[i]);
        else printf("0 ");
    return 0;
}