Pagini recente » Cod sursa (job #1296436) | Profil Luncasu_Victor | Cod sursa (job #3334357) | Cod sursa (job #3330134) | Cod sursa (job #3319876)
#include<fstream>
#include<vector>
#include<queue>
#include<utility>
#include<algorithm>
#include<unordered_set>
using namespace std ;
ifstream cin("sate.in");
ofstream cout("sate.out");
void BFS(int start , vector<vector<pair<int,int> > > &adj , vector<int> &dist ){
queue<int> q ;
unordered_set<int> seen ;
q.push(start) ;
seen.insert(start);
while(!q.empty()){
int fr = q.front() ;
q.pop() ;
//cout<<fr<< ' ';
for(int j = 0 ; j < adj[fr].size() ; j ++ ){
pair<int,int> nr = adj[fr][j] ;
if(dist[nr.first] == 0 ){
if(fr < nr.first )
dist[nr.first] = dist[fr] + nr.second ;
else
dist[nr.first] = dist[fr] - nr.second ;
}
if(!seen.count(nr.first)){
q.push(nr.first);
seen.insert(nr.first);
}
}
}
}
int main(){
int n , m , c , x , y , start , end ;
cin>>n>>m>>start>>end;
vector<vector<pair<int,int> > > adj(n+1) ;
for(int i = 1 ; i <= m ; i ++ ){
cin>>x>>y>>c;
adj[x].push_back(make_pair(y,c));
adj[y].push_back(make_pair(x,c));
}
vector <int> dist ( n+1 , 0 ) ;
dist[start] = 0 ;
BFS(start,adj,dist);
cout<<dist[end];
return 0 ;
}