Cod sursa(job #1172302)

Utilizator Margarita_si_retelele_de_socializareMargarita si retelele de socializare intr-o comedie Margarita_si_retelele_de_socializare Data 17 aprilie 2014 11:49:55
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;

struct coord
{
    int cost,nod;
};

struct coada
{
    int varf,relax;
    inline bool operator < (const coada& e) const
    {
        return relax > e.relax;
    }
};

vector <coord> v[50002];
int n,m,d[50002];
const int oo=1<<30;
int main()
{
    register int i,x;
    coord y;
    ifstream fin("dijkstra.in");
    fin>>n>>m;
    for (i=1;i<=m;i++)
        {
            fin>>x>>y.nod>>y.cost;
            v[x].push_back(y);
        }
    priority_queue< coada >q;
    register int costarico;
    register coada kl;
    d[1]=0;
    for (i=2;i<=n;i++)
        d[i]=oo;
    x=1;
    kl.varf=1;
    kl.relax=0;
    q.push(kl);
    register int cnt = 0;
    while (!q.empty() && cnt!=n){
            x=q.top().varf;
            costarico=q.top().relax;
            q.pop();
            if (costarico==d[x])
            {
                ++cnt;
                for(vector < coord > :: iterator it = v[x].begin(); it!=v[x].end(); ++it)
                    if (d[(*it).nod]>d[x]+(*it).cost)
                    {
                        d[(*it).nod]=d[x]+(*it).cost;
                        kl.varf = (*it).nod;
                        kl.relax = d[(*it).nod];
                        q.push(kl);
                    }
            }
        }
    ofstream fout("dijkstra.out");
    for (register int i = 2;i<=n;++i)
        if (d[i]!=oo)
            fout<<d[i]<<" ";
        else fout<<"0 ";
    fout<<"\n";
    return 0;
}