Cod sursa(job #1676232)

Utilizator TimoteiCopaciu Timotei Timotei Data 5 aprilie 2016 19:45:51
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
int n, m, y1, y2, x1, x2, dist[30005], nod, D;
struct distanta{
   int v, d;
}x, y;
queue <int> C;
vector <distanta> vecin[30005];
int main()
{
    ifstream f("sate.in");
    ofstream g("sate.out");
    f >> n >> m >> y1 >> y2;
    for(int i = 1; i <= m; ++i){
        f >> x1 >> x2 >> x.d;
        x.v = x2;
        if(vecin[x1].size() == 0) vecin[x1].push_back(y);
        vecin[x1].push_back(x);
        vecin[x1][0].v++;
        x.v = x1;
        if(vecin[x2].size() == 0) vecin[x2].push_back(y);
        vecin[x2].push_back(x);
        vecin[x2][0].v++;
    }
    dist[y1] = 1;
    C.push(y1);
    while(!C.empty()){
        nod = C.front();
        for(int i = 1; i <= vecin[nod][0].v; ++i)
         if(dist[vecin[nod][i].v] == 0){
            if(vecin[nod][i].v > nod)
                 dist[vecin[nod][i].v] = dist[nod] + vecin[nod][i].d;
            else dist[vecin[nod][i].v] = dist[nod] - vecin[nod][i].d;

            if(vecin[nod][i].v == y2){
                g << dist[y2] - 1;
                return 0;
            }
            C.push(vecin[nod][i].v);
         }
        C.pop();
    }
    return 0;
}