Cod sursa(job #2452654)

Utilizator armigheGheorghe Liviu Armand armighe Data 31 august 2019 16:38:11
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#include<fstream>
#include<vector>
#include<queue>
#define INF 2000000000
using namespace std;
FILE *f=fopen("dijkstra.in","r");
ofstream g("dijkstra.out");

struct elem
{
    int x,c;
    bool operator < (const elem &a) const
    {
        return c<a.c;
    }
};

vector<elem>a[50002];
priority_queue<elem>q;
int v[50002];
int main()
{
    int n,m,i,x,y,z,l;
    elem p;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&x,&y,&z);
        a[x].push_back(elem{y,z});
    }
    for(i=2;i<=n;i++)
        v[i]=INF;
    p.x=1;
    p.c=0;
    q.push(p);
    while(!q.empty())
    {
        p=q.top();
        q.pop();
        l=a[p.x].size();
        for(i=0;i<l;i++)
        if(v[a[p.x][i].x]>v[p.x]+a[p.x][i].c)
        {
            v[a[p.x][i].x]=v[p.x]+a[p.x][i].c;
            q.push(elem{a[p.x][i].x,v[a[p.x][i].x]});
        }
    }
    for(i=2;i<=n;i++)
    if(v[i]!=INF)
        g<<v[i]<<" ";
    else
        g<<0<<" ";
    return 0;
}