Cod sursa(job #1947257)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 30 martie 2017 21:05:22
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include<vector>
#include<set>
#define INF INT_MAX
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector<vector<pair<int,int> > > la;
vector<int> dist;
int n,m,n1,n2,cost;
int main()
{
    f>>n>>m;la.resize(n+1);
    for(int i=1;i<=m;i++)
        {
            f>>n1>>n2>>cost;
            la[n1].push_back(make_pair(n2,cost));
        }
    dist.resize(n+1,INF);dist[1]=0;
    set<pair<int,int> > c;
    c.insert(make_pair(0,1));
    while(!c.empty())
        {
            n1=c.begin()->second;
            c.erase(c.begin());
            for(vector<pair<int, int> >::iterator it = la[n1].begin(); it != la[n1].end(); ++it)
                {
                    n2=it->first;
                    cost=it->second;
                    if(dist[n2]>dist[n1]+cost)
                        {
                            if(dist[n2]!=INF) c.erase(c.find(make_pair(dist[n2],n2)));
                            dist[n2]=dist[n1]+cost;
                            c.insert(make_pair(dist[n2],n2));
                        }
                }
        }
    for(int i=2;i<=n;i++)
        g<<(1-dist[i]/INF)*dist[i]<<' ';
    g<<'\n';
    return 0;
}