Pagini recente » Cod sursa (job #735349) | Cod sursa (job #2682178) | Cod sursa (job #1360038) | Cod sursa (job #88926) | Cod sursa (job #2872364)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
int n,m;
int p,q;
vector <pair<int,long long> >V[30005];
int viz[30005];
void DFS(int frontNode,int curentNode,int finalNode,long long D,long long &sol)
{
if(curentNode==finalNode)
{
sol=D;
return ;
}else
{
for(int i=0;i<V[curentNode].size();i++)
{
int vecin=V[curentNode][i].first;
if(viz[vecin]==0)
{
viz[vecin]=1;
if(curentNode==frontNode)
DFS(frontNode,vecin,finalNode,D+V[curentNode][i].second,sol);
else
{
if(vecin>curentNode)
DFS(frontNode,vecin,finalNode,D+V[curentNode][i].second,sol);
else
DFS(frontNode,vecin,finalNode,abs(D-V[curentNode][i].second),sol);
}
}
}
}
}
int main()
{
fi>>n>>m>>p>>q;
for(int i=1;i<=m;i++)
{
int x,y;
long long D;
fi>>x>>y>>D;
V[x].push_back(make_pair(y,D));
V[y].push_back(make_pair(x,D));
}
viz[p]=1;
long long sol=0;
DFS(p,p,q,0,sol);
fo<<sol;
return 0;
}