Cod sursa(job #1712646)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 3 iunie 2016 10:47:27
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <vector>
#include <queue>

using std::queue;
using std::vector;

typedef struct
{
    int nod;
    int cost;
} nod_s;

int dist[30001];
vector <nod_s> v[30001];
queue <int> Q;

void bfs(int start)
{
    int nodc,i;
    dist[start] = 1;
    Q.push(start);
    while(!Q.empty())
    {
        nodc = Q.front();
        Q.pop();
        for(i = 0; i < v[nodc].size(); ++i)
        {
            if(dist[v[nodc][i].nod] == 0)
            {
                if(v[nodc][i].nod < nodc)
                    dist[v[nodc][i].nod] = dist[nodc] - v[nodc][i].cost;
                else
                    dist[v[nodc][i].nod] = dist[nodc] + v[nodc][i].cost;
                Q.push(v[nodc][i].nod);
            }

        }
    }
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    int i;
    int n,m,xstart,xstop;
    int s1,s2,scost;
    scanf("%d %d %d %d",&n,&m,&xstart,&xstop);
    for(i = 1; i <= m; ++i)
    {
        scanf("%d %d %d",&s1,&s2,&scost);
        v[s1].push_back(nod_s {s2,scost});
        v[s2].push_back(nod_s {s1,scost});
    }
    bfs(xstart);
    printf("%d\n",dist[xstop] - 1);
    return 0;
}