Pagini recente » Cod sursa (job #541410) | Cod sursa (job #654154) | Cod sursa (job #2199889) | Cod sursa (job #1499024) | Cod sursa (job #2712717)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
int N,M;
int X,Y;
vector <pair <int,int> > vec[30005];
int parcurs[30001];
void DFS(int parent ,int v_curent,int value)
{
for(int j=0;j<=vec[v_curent].size()-1;j++)
{
if(vec[v_curent][j].first!=parent && parcurs[vec[v_curent][j].first]==0)
{
parcurs[vec[v_curent][j].first]=1;
if(vec[v_curent][j].first<v_curent)
{
vec[1].push_back(make_pair(vec[v_curent][j].first,abs(vec[v_curent][j].second-value)));
DFS(v_curent,vec[v_curent][j].first,abs(vec[v_curent][j].second-value));
}
else
{
vec[1].push_back(make_pair(vec[v_curent][j].first,value+vec[v_curent][j].second));
DFS(v_curent,vec[v_curent][j].first,value+vec[v_curent][j].second);
}
}
}
}
void rezolvare(int parent)
{
for(int i=0;i<=vec[parent].size()-1;i++)
{
if(parcurs[vec[parent][i].first]==0)
{
parcurs[vec[parent][i].first]=1;
DFS(parent,vec[parent][i].first,vec[parent][i].second);
}
}
}
int main()
{
fi>>N>>M;
fi>>X>>Y;
int x,y,D;
for(int i=1;i<=M;i++)
{
fi>>x>>y>>D;
vec[x].push_back(make_pair(y,D));
vec[y].push_back(make_pair(x,D));
}
parcurs[X]=1;
rezolvare(X);
for(int i=0;i<=vec[X].size()-1;i++)
{
if(vec[X][i].first==Y)
{
fo<<vec[X][i].second;
break;
}
}
return 0;
}