Pagini recente » Cod sursa (job #929053) | Cod sursa (job #113613) | Cod sursa (job #705335) | Cod sursa (job #1324608) | Cod sursa (job #1691522)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
vector< pair<int,int> > graf[30005];
queue<int> coada;
int n,m,X,Y;
long long costuri[30005];
bool vizitat[30005];
void BFS(int s)
{
int x;
while(!coada.empty())
{
x=coada.front();
coada.pop();
for(int i=0;i<graf[x].size();i++)
{
if(!vizitat[graf[x][i].first])
{
if(graf[x][i].first>x)
{
vizitat[graf[x][i].first]=1;
costuri[graf[x][i].first]=costuri[x]+graf[x][i].second;
coada.push(graf[x][i].first);
}else if(graf[x][i].first<x){
vizitat[graf[x][i].first]=1;
costuri[graf[x][i].first]=costuri[x]-graf[x][i].second;
coada.push(graf[x][i].first);
}
}
}
}
}
int main()
{
int i,j,a,b,d;
in>>n>>m>>X>>Y;
for(i=1;i<=m;i++)
{
in>>a>>b>>d;
graf[a].push_back(make_pair(b,d));
graf[b].push_back(make_pair(a,d));
}
costuri[X]=0;
vizitat[X]=1;
coada.push(X);
BFS(X);
out<<costuri[Y];
return 0;
}