Pagini recente » Cod sursa (job #2951375) | Cod sursa (job #2206142) | Cod sursa (job #1752770) | Cod sursa (job #574882) | Cod sursa (job #2276088)
#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;
}