Pagini recente » Cod sursa (job #2615158) | Cod sursa (job #753354) | Cod sursa (job #1430032) | Cod sursa (job #3257247) | Cod sursa (job #2209258)
#include <iostream>
#include <fstream>
#include <queue>
#include <map>
#include <vector>
#define MAXN 30005
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,sat_inceput,sat_sfarsit,dp[MAXN];
bool viz[MAXN];
vector<int>graf[MAXN];
queue<int>stiva;
map<int,int>lungime[MAXN];
int bfs(){
stiva.push(sat_inceput);
viz[sat_inceput] = true;
while(!stiva.empty()){
int sat = stiva.front();
stiva.pop();
for(int i = 0; i < graf[sat].size(); i++){
int sat_curent = graf[sat][i];
if(!viz[sat_curent]){
stiva.push(sat_curent);
viz[sat_curent] = true;
if(sat_curent != sat_inceput){
if(sat_curent >= sat)
dp[sat_curent] = dp[sat] + lungime[sat][sat_curent];
else if(sat_curent < sat)
dp[sat_curent] = dp[sat] - lungime[sat][sat_curent];
//cout<<"Distanta de la "<<sat_inceput<<" la "<<sat_curent<<" este : "<<dp[sat_curent]<<endl;
}
}
}
}
return dp[sat_sfarsit];
}
int main()
{
in.tie(NULL);
out.tie(NULL);
ios::sync_with_stdio(false);
in>>n>>m>>sat_inceput>>sat_sfarsit;
int sat1,sat2;
for(int i = 1; i <= m; i++){
int lung;
in>>sat1>>sat2>>lung;
lungime[sat1][sat2] = lung;
lungime[sat2][sat1] = lung;
graf[sat1].push_back(sat2);
graf[sat2].push_back(sat1);
}
out<<bfs();
return 0;
}