Cod sursa(job #892537)

Utilizator ionutmodoModoranu Ionut-Vlad ionutmodo Data 26 februarie 2013 10:27:37
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define inf 2000000000
using namespace std;
struct coord{int x,c;};
vector<coord> L[10005];
queue <int> Q;
int n, m, k, loc[20],d[2005][2005];

void Read()
{
    coord aux;
    int i,x,y;
    freopen("ubuntzei.in","r",stdin);
    scanf("%d %d",&n, &m);
    scanf("%d",&k);
    for(i=1; i<=k; i++)
        scanf("%d",&loc[i]);
    for(i=1; i<=m; i++)
    {
        scanf("%d %d %d", &x, &y, &aux.c);
        aux.x = y;
        L[x].push_back(aux);
        aux.x = x;
        L[y].push_back(aux);
    }
}
void Initializare(int nod)
{
    for(int i=1; i<=n; i++)
        d[nod][i] = inf;
}

void Bellmanford(int nod)
{
    Initializare(nod);
    d[nod][nod] = 0;
    Q.push(nod);
    while(!Q.empty())
    {
        int k = Q.front();
        Q.pop();
        vector<coord>::iterator it;
        for(it=L[k].begin(); it!=L[k].end(); it++)
        {
            coord aux = *it;
            if(d[nod][aux.x] > d[nod][k] + aux.c)
            {
                d[nod][aux.x] = d[nod][k] + aux.c;
                Q.push(aux.x);
            }
        }
    }
}

void Solve()
{
    if(k==0)
    {
        Bellmanford(1);
        freopen("ubuntzei.out","w",stdout);
        printf("%d\n", d[1][n]);
    }
//    else
//    {
//        for(int i=1; i<=k; i++)
//            Bellmanford(loc[i]);
//
//        for(int i=1; i<=n; i++)
//        {
//            for(int j=1; j<=n; j++)
//                cout << d[i][j] << " ";
//            cout << "\n";
//        }
//    }
}
int main()
{
    Read();
    Solve();
    return 0;
}