Cod sursa(job #1650974)

Utilizator sfechisalin@yahoo.comSfechis Alin [email protected] Data 11 martie 2016 22:22:32
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct Edge
{
    int ff,ss;//ff=nod,ss=cost
    bool operator < (const Edge &c)const{
        return c.ss<ss;
    }
};
int n,m;
vector<int>D;
bitset<50005>viz;
vector<vector<Edge>>G;
priority_queue<Edge>Q;
void Dijkstra(int nod)
{
    int x,cost;
    D[nod]=0;
    Q.push({nod,0});
    while(!Q.empty())
    {
        x=Q.top().ff;
        cost=Q.top().ss;
        Q.pop();
        if(viz[x])
            continue;
        for(auto w:G[x])
        {
            if(D[w.ff]>w.ss+cost)
            {
                D[w.ff]=w.ss+cost;
                Q.push({w.ff,D[w.ff]});
            }
        }
        while ( !Q.empty() && viz[Q.top().ff] )
            Q.pop();
    }
}
int main()
{
    fin>>n>>m;
    G=vector<vector<Edge>>(n+1);
    D=vector<int>(n+1,INF);
    for(int x,y,cost;m;--m)
    {
        fin>>x>>y>>cost;
        G[x].push_back({y,cost});
    }
    Dijkstra(1);
    for(int i=2;i<=n;++i)
        if(D[i]==INF)
            fout<<0<<" ";
        else
            fout<<D[i]<<" ";
}