Cod sursa(job #2682342)

Utilizator LuxinMatMatasaru Luxin Gabriel LuxinMat Data 8 decembrie 2020 15:25:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
vector<pair<int, int>> v[50001]; /// first-cost second-vecin
int dist[50001], n;
bool viz[50001];
void dijkstra(int a)
{
    for(int i=1; i<=n; i++)
    {
        dist[i]=1e9;
        viz[i]=false;
    }
    priority_queue<pair<int, int>> distmin; /// first-cost second-nod
    distmin.push({0, a});
    dist[a]=0;
    while(distmin.size() != 0)
    {
        pair<int, int> x=distmin.top ();
        distmin.pop ();
        if(viz[x.second] == false)
        {
            viz[x.second]=true;
            for(int i=0; i<v[x.second].size(); i++)
            {
                if(viz[v[x.second][i].second] == false)
                    distmin.push({-1*(dist[x.second]+v[x.second][i].first), v[x.second][i].second});
                if(dist[v[x.second][i].second] > dist[x.second]+v[x.second][i].first)
                    dist[v[x.second][i].second]=dist[x.second]+v[x.second][i].first;
            }
        }
    }
}
int main()
{
    int m;
    cin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int x, y, c;
        cin>>x>>y>>c;
        v[x].push_back({c, y});
    }
    dijkstra(1);
    for(int j=2; j<=n; j++)
        if(dist[j] < 1e9)
            cout<<dist[j]<<" ";
        else
            cout<<"0 ";
    return 0;
}