Pagini recente » Cod sursa (job #2881640) | Atasamentele paginii Clasament omg_am_revenit | Cod sursa (job #545914) | Atasamentele paginii wellcodesimulare2martieclasa11-12 | Cod sursa (job #2854190)
#include<fstream>
#include<vector>
#include<queue>
#include<utility>
using namespace std ;
vector<pair<int,int>> graf[30005];
pair<int,int> parinti[30005];
int n,m,x,y;
void calcLevel()
{
int vizitate[30005] ;
fill(vizitate+0, vizitate+n+5, -1);
queue<int> q ;
vizitate[x] = 0 ;
q.push(x) ;
while(q.size() > 0 )
{
int currentNode= q.front();
for(unsigned int j = 0 ; j < graf[currentNode].size(); j++)
{
int nod = graf[currentNode][j].first ;
if(vizitate[nod] == -1)
{
vizitate[nod] = vizitate[currentNode]+1;
parinti[nod]={currentNode, graf[currentNode][j].second};
q.push(nod);
}
if(nod == y)
return ;
}
q.pop();
}
}
int main()
{
ifstream cin("sate.in");
ofstream cout("sate.out");
cin >> n >> m >> x >>y ;
int a, b, d ;
for(int i = 0 ; i < m ;i++)
{
cin >> a >> b >> d;
graf[a].push_back({b, d});
graf[b].push_back({a, d});
}
calcLevel() ;
int sum = 0 ;
pair<int,int> nod = {y,0};
while(nod.first != x )
{
if(nod.first > parinti[nod.first].first)
sum += parinti[nod.first].second ;
else sum -= parinti[nod.first].second;
nod = parinti[nod.first];
}
cout << sum ;
cin.close(); cout.close();
return 0 ;
}