Cod sursa(job #1619241)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 28 februarie 2016 14:12:42
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
#define oo 1<<30

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int NMAX = 50001;
vector<pair<int,int> > muchii[NMAX];
bitset<NMAX> mark;
int n,m;
int values[NMAX];

void citire()
{
    in>>n>>m;
    int x,y,z;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y>>z;
        muchii[x].push_back(make_pair(y,z));
    }
    in.close();
}

void dijsktra()
{
    mark.set(1);
    for(int i = 2;i<=n;i++)
        values[i] = oo;
    for(unsigned int i = 0;i<muchii[1].size();i++)
        values[muchii[1][i].first] = muchii[1][i].second;
    for(int i=1;i<=n-1;i++)
    {
        int y,value = oo;
        for(int i=2;i<=n;i++)
            if(!mark.test(i) && value > values[i])
            {
                y = i;
                value = values[i];
            }
        mark.set(y);
        int target,cost;
        for(unsigned int i=0;i<muchii[y].size();i++)
        {
           target = muchii[y][i].first;
           cost = muchii[y][i].second;
           if(values[target] > values[y] + cost)
            values[target] = values[y] + cost;
        }
    }
}

int main()
{
    citire();
    dijsktra();
    for(int i=2;i<=n;i++)
        if(values[i]==oo)
        out<<0<<" ";
    else
           out<<values[i]<<" ";
    return 0;
}