Cod sursa(job #2447138)

Utilizator butnaru_vlad2003Butnaru Vlad butnaru_vlad2003 Data 12 august 2019 11:49:51
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
set <pair<int,int>> myset;
vector <pair<int,int>> v[100001];
int raspuns[100001];
bool vizitat[100001];
void parcurgere(int nod)
{
    int cost;
    vizitat[nod]=1;
    for (int i=0;i<v[nod].size();++i)
    {
        if (!vizitat[v[nod][i].first])
        {
            vizitat[v[nod][i].first]=1;
            myset.insert(make_pair(v[nod][i].second+raspuns[nod],v[nod][i].first));
                raspuns[v[nod][i].first]=v[nod][i].second+raspuns[nod];
        }
        else
        {
            if (v[nod][i].second+raspuns[nod]<raspuns[v[nod][i].first])
            {
                myset.erase(make_pair(raspuns[v[nod][i].first],v[nod][i].first));
                raspuns[v[nod][i].first]=v[nod][i].second+raspuns[nod];
                myset.insert(make_pair(v[nod][i].second+raspuns[nod],v[nod][i].first));
            }
        }
    }
}
main ()
{
    int n,m;
    in>>n>>m;
    for (int i=1;i<=m;++i)
    {
        int a,b,c;
        in>>a>>b>>c;
        v[a].push_back(make_pair(b,c));
        v[b].push_back(make_pair(a,c));
    }
    myset.insert(make_pair(0,1));
    while (!myset.empty())
    {
        int a=(*myset.begin()).second;
        myset.erase(myset.begin());
        parcurgere(a);
    }
    for (int i=2;i<=n;++i)
        out<<raspuns[i]<<' ';
    return 0;
}