Cod sursa(job #1549881)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 12 decembrie 2015 21:15:38
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <queue>
#define L 350
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");

vector<int> vecini[L];
queue<int> q;
int a[L][L];
int o,p,d,x,y,n,m;
bool vizitat[L];
int tata[L];
int main()
{
    f >> n >> m >> x >> y;
    for(int i = 1; i <= m; i++){
        f >> o >> p >> d;
        a[o][p] = d;
        a[p][o] = d;
        vecini[p].push_back(o);
        vecini[o].push_back(p);
    }
  //  g << 1.0*(sizeof(a)  + sizeof(vecini) + sizeof(q) + sizeof(tata) + sizeof(vizitat))/1024/1024;
    /**BFS din x*/
    q.push(x);
    vizitat[x] = 1;
    tata[x] = -1;
    int ok = 0;
    while(!q.empty() && ok == 0){

        int curent = q.front();

        for(int i = 0; i < vecini[curent].size(); i++){
            if(vizitat[vecini[curent][i]] == 0){
                vizitat[vecini[curent][i]] = 1;
                tata[vecini[curent][i]] = curent;
                if(vecini[curent][i] == y){
                    ok = 1;
                    break;
                }
                q.push(vecini[curent][i]);
            }
        }
        q.pop();
    }

    int j = y,s = 0;

    while(tata[j] > 0){
        if(j > tata[j]){
            s += a[j][tata[j]];
        }else{
            s -= a[j][tata[j]];
        }
        j = tata[j];
    }
    g << s <<"\n";
    return 0;
}