Cod sursa(job #1640630)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 8 martie 2016 18:42:56
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
vector <pair<int,int>> G[50005];
int n,m,a,b,c;
const int64_t INF = 1e9;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
void dijkstra(int start)
{
    vector <int64_t> dist(n+1,INF);
    dist[start]=0;
   int u;
	set<pair<int,int> > s;
	s.insert({dist[start], start});
    while(!s.empty())
    {
       u = s.begin() -> second;
        s.erase(s.begin());
        for(auto p : G[u])
            if(dist[p.first]>dist[u]+p.second)
        {
            s.erase({dist[p.first],p.first});
            dist[p.first]=dist[u]+p.second;
            s.insert({dist[p.first],p.first});

        }
    }
    for(int i=2;i<=n;i++)
        if(dist[i]!=INF)
        g<<dist[i]<<" ";
    else
        g<<"0 ";
}
int main()
{
    f>>n>>m;
    for(int i=0; i<m; i++)
        f>>a>>b>>c,G[a].push_back(make_pair(b,c));
     dijkstra(1);
}