Pagini recente » Cod sursa (job #1684697) | Istoria paginii runda/steleinf2010seniori/clasament | Cod sursa (job #192889) | Cod sursa (job #669997) | Cod sursa (job #2854185)
#include<fstream>
#include<vector>
#include<queue>
#include<utility>
using namespace std ;
vector<pair<int,int>> graf[30000];
pair<int,int> parinti[30000];
int n,m,x,y;
void calcLevel()
{
int vizitate[n+1] ;
fill(vizitate+0, vizitate+n+1, -1);
queue<int> q ;
vizitate[x] = 0 ;
q.push(x) ;
while(!q.empty())
{
int currentNode= q.front();
for(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 ;
}