Cod sursa(job #1549895)

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

vector<pair<int,int> > vecini[L];
queue<int> q;
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;
        vecini[p].push_back(make_pair(o,d));
        vecini[o].push_back(make_pair(p,d));
    }
  //  g << 1.0*(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++){
            int ales = vecini[curent][i].first;
            if(vizitat[ales] == 0){
                vizitat[ales] = 1;
                tata[ales] = curent;
                if(ales == y){
                    ok = 1;
                    break;
                }
                q.push(ales);
            }
        }
        q.pop();
    }

    int j = y,s = 0;

    while(tata[j] > 0){
        if(j > tata[j]){
            if(vecini[j].size() > 0){
                for(int i = 0; i < vecini[j].size(); i++){
                    if(vecini[j][i].first == tata[j]){
                        s += vecini[j][i].second;
                        break;
                    }
                }
            }
        }else{
            if(vecini[j].size() > 0){
                for(int i = 0; i < vecini[j].size(); i++){
                    if(vecini[j][i].first == tata[j]){
                        s -= vecini[j][i].second;
                        break;
                    }
                }
            }
        }
        j = tata[j];
    }
    g << abs(s) <<"\n";
    return 0;
}