Pagini recente » Cod sursa (job #1639745) | Cod sursa (job #193714) | Cod sursa (job #1639684) | Cod sursa (job #532078) | Cod sursa (job #2854175)
#include<fstream>
#include<vector>
#include<queue>
using namespace std ;
vector<vector<pair<int,int>>> graf(30000,vector<pair<int,int>>());
pair<int,int> parinti[30000];
int n,m,x,y;
void calcLevel()
{
int vizitate[n+1] ;
for(int i = 0 ; i <=n ; i++)vizitate[i] = -1 ;
queue<int> q ;
vizitate[x] = 0 ;
q.push(x) ;
while(!q.empty())
{
for(int j = 0 ; j < graf[q.front()].size(); j++)
{
int nod = graf[q.front()][j].first ;
if(vizitate[nod] == -1)
{
vizitate[nod] = vizitate[q.front()]+1;
parinti[nod]={q.front(), graf[q.front()][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 ;
}