Cod sursa(job #2396952)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 3 aprilie 2019 23:17:33
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
#define Nmax 50005
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m, x, y, c, i, d[Nmax];
struct muchie
{
    int y, c;
};
struct cmp
{
    bool operator()(int x, int y)
    {
        if(d[x]!=d[y])
            return d[x]<d[y];
        return x<y;
    }
};
vector <muchie> v[Nmax];
set <int, cmp> s;
int main()
{
    int aux, mar;
    fin >> n >> m;
    for(i=1; i<=m; i++)
    {
        fin >> x >> y >> c;
        v[x].push_back({y, c});
    }
    for(i=2; i<=n; i++)
        d[i]=INT_MAX;
    for(i=1;i<=n;i++)
        {
            s.insert(i);
            mar=s.size();
        }
    while(!s.empty())
    {
        set <int, cmp> :: iterator it;
        it=s.begin();
        x=*it;
        s.erase(it);
        mar=s.size();
        if(d[x]==INT_MAX)
            break;
        for(i=0; i<v[x].size(); i++)
            if(d[v[x][i].y]>d[x]+v[x][i].c)
            {
                aux=v[x][i].y;
                if(s.find(v[x][i].y)!=s.end())
                    s.erase(s.find(v[x][i].y));
                d[v[x][i].y]=d[x]+v[x][i].c;
                s.insert(v[x][i].y);
            }
    }
    for(i=2; i<=n; i++)
    {
        if(d[i]==INT_MAX)
            fout << 0 << ' ';
        else
            fout << d[i] << ' ';
    }
    return 0;
}