Cod sursa(job #892547)

Utilizator CosminnnChirica Cosmin Cosminnn Data 26 februarie 2013 10:30:05
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define INF 2000000000
using namespace std;

struct NOD
{
    int x,c;
};
vector <NOD>L[2010];
queue <int> q;

int n,m,d[2010][2010],loc[20],nloc;

inline void Read()
{
    int i,x,y;
    NOD aux;
    ifstream f("ubuntzei.in");
    f>>n>>m;
    f>>nloc;
    for(i=1;i<=nloc;i++)
        f>>loc[i];
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>aux.c;
        aux.x=y;
        L[x].push_back(aux);
        aux.x=x;
        L[y].push_back(aux);
    }
    f.close();
}
inline void Initializare()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            d[i][j]=INF;
}
inline void BellmanFord(int nod)
{
    int i,x;
    NOD aux;

    d[nod][nod]=0;
    q.push(nod);

    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(i=0; i<L[x].size() ; i++)
        {
            aux=L[x][i];
            if(d[nod][aux.x]>d[nod][x]+aux.c)
            {
                q.push(aux.x);
                d[nod][aux.x]=d[nod][x]+aux.c;
            }
        }
    }


}
inline void Solve()
{
    ofstream g("ubuntzei.out");
    Initializare();
    if(nloc == 0)
    {
        BellmanFord(1);
        g<<d[1][n]<<"\n";
    }

    g.close();
}
int main()
{
    Read();
    Solve();

    return 0;
}