Cod sursa(job #2526490)

Utilizator matei123Biciusca Matei matei123 Data 18 ianuarie 2020 18:22:31
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define INF 999999999;
int viz[50001],dist[50001],n,m,x,y,z;
vector < pair<int,int> > edge[50001];
struct cmp
{   bool operator ()(int x,int y)
    {   if(dist[x]>dist[y]) return 1;
        else return 0;
    }
};
priority_queue< int, vector <int> ,cmp > q;
void dijkstra(int start)
{   q.push(start);
    dist[start]=0;
    viz[start]=1;
    while (!q.empty())
    {   int vert=q.top();
        q.pop();
        viz[vert]=0;
        for(int i=0;i<edge[vert].size();i++)
        {   int near=edge[vert][i].first;
            int cost=edge[vert][i].second;
            if(dist[near]>dist[vert]+cost)
            {   dist[near]=dist[vert]+cost;
                if(!viz[near])
                {   viz[near]=1;
                    q.push(near);
                }
            }
        }
    }
}
int main()
{   in>>n>>m;
    for(int i=1;i<=m;i++)
    {   in>>x>>y>>z;
        edge[x].push_back({y,z});
    }
    for(int i=1;i<=n;i++) dist[i]=INF;
    dijkstra(1);
    for(int i=2;i<=n;i++)
    {   if(dist[i]== 999999999) out<<"0 ";
        else
            out<<dist[i]<<" ";
    }
    return 0;
}