Cod sursa(job #1638708)

Utilizator hunisanHunor Csaki hunisan Data 8 martie 2016 08:44:57
Problema Ubuntzei Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <algorithm>

using namespace std;

bool comp(pair<int,int> a, pair<int,int> b)
{
    return a.second < b.second;

}
int main()
{
    cout << "hunibuntu" << endl;

    ifstream be("ubuntzei.in");
    ofstream ki("ubuntzei.out");

    int n,m,k;

    be >> n >> m;
    be >> k;
    int sz[k];
    for(int i = 0; i < k; i++)
        be >> sz[i];

    int a[n][n];
    int d[n], volt[n];
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
            a[i][j]=0;
        d[i] = -1;
        volt[i] = 0;
    }
    for(int i = 0; i < m; i++)
    {
        int x, y, c;
        be >> x >> y >> c;
        a[x-1][y-1]=c;
        a[y-1][x-1]=c;

    }
    d[0]=0;

    queue<int> vsor;
    vsor.push(0);

    while(!vsor.empty())
    {
        int c = vsor.front();
        vsor.pop();
        volt[c] = true;
        vector<pair<int,int> > lista;
        for(int i = 0; i < n; i++)
        {
            //cout << a[c][i] << endl;

            if(!volt[i] && a[c][i]>0 && (d[i]==-1 || d[i] > d[c]+a[c][i]))
            {
                lista.push_back(make_pair(i,a[c][i]));
                d[i] = d[c]+a[c][i];
//                if(i==n-1)
//                {
//                    while(!vsor.empty())
//                        vsor.pop();
//
//                    break;
//                }
            }
        }
        sort(lista.begin(),lista.end(),comp);
        for(int i = 0; i < lista.size(); i++)
        {
            vsor.push(lista[i].first);
        }
//        for(int i  = 0; i < n; i++)
//            cout << d[i] << " ";
//        cout << endl;
    }

    ki << d[n-1] << endl;

    return 0;
}