Cod sursa(job #2276088)

Utilizator ptudortudor P ptudor Data 4 noiembrie 2018 10:04:18
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
int N,M,X,Y,v[30005];
queue <pair<int,int>> trimitori[100050];
queue <pair<int,int>> primitori[100050];
void make_trimitori_primitori()
{int i,x,y,k;
    for(i=1;i<=M;i++)
    {
        in>>x>>y>>k;
        trimitori[x].push({y,k});
        primitori[y].push({x,k});
    }
    ///for (i=1;i<=N;i++){cout<<i<<" element\n";while (!trimitori[i].empty()){cout<<trimitori[i].front().first<<" ";trimitori[i].pop();}cout<<"\n";while (!primitori[i].empty()){cout<<primitori[i].front().first<<" ";primitori[i].pop();}cout<<"\n";}
}
void solve(int x)
{int distanta,indice;
    while (!trimitori[x].empty())
    {
        indice=trimitori[x].front().first;
        distanta=trimitori[x].front().second;
        v[indice]=v[x]+distanta;
        trimitori[x].pop();
      //   cout<<"TRIMITOR  "<<x<<" "<<indice<<" "<<distanta<<" "<<v[x]<<" "<<v[indice]<<"\n";
        solve(indice);
    }
    while (!primitori[x].empty())
    {
        indice=primitori[x].front().first;
        distanta=primitori[x].front().second;
        v[indice]=v[x]-distanta;
        primitori[x].pop();
    //    cout<<"PRIMITOR  "<<x<<" "<<indice<<" "<<distanta<<" "<<v[x]<<" "<<v[indice]<<"\n";
        solve(indice);

    }
}
int main()
{int i;
    in>>N>>M>>X>>Y;
    make_trimitori_primitori();
    v[X]=0;
    solve(X);
  //  for (i=1;i<=N;i++)cout<<v[i]<<" ";
    out<<v[Y]<<"\n";
    out.close();
    in.close();
    return 0;
}