Cod sursa(job #1781830)

Utilizator RaduToporanRadu Toporan RaduToporan Data 17 octombrie 2016 15:11:13
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.18 kb
#include <cstdio>
#include <queue>

using namespace std;
int n,m,i,start,stop,viz[30005],d[30005];
queue <int> c;
struct nod
{
    int info;
    int distanta;
    nod *urm;
};
nod *v[30005];

void citire()
{
    int i,x,y,D;
    scanf("%d%d%d%d",&n,&m,&start,&stop);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d%d",&x,&y,&D);
        nod *elem=new nod;
        elem->info=y;
        elem->distanta=D;
        elem->urm=v[x];
        v[x]=elem;

        elem=new nod;
        elem->info=x;
        elem->distanta=-D;
        elem->urm=v[y];
        v[y]=elem;
    }
}

void bfs(int s)
{
    c.push(s);
    viz[s]=1;
    d[s]=0;
    while(!c.empty())
    {
        int x=c.front();
        c.pop();
        for (nod *ult=v[x]; ult!=NULL; ult=ult->urm)
            if (viz[ult->info]==0)
            {
                c.push(ult->info);
                viz[ult->info]=1;
                d[ult->info]=d[x]+(ult->distanta);
            }
    }
}

void afisare()
{
    printf("%d\n",d[stop]);
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    citire();
    bfs(start);
    afisare();
    return 0;
}