Pagini recente » Cod sursa (job #2401227) | Cod sursa (job #1992927) | Cod sursa (job #2655388) | Cod sursa (job #1985503) | Cod sursa (job #1549884)
#include <fstream>
#include <vector>
#include <queue>
#define L 30600
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
vector<pair<int,int> > vecini[L];
queue<int> q;
int o,p,d,x,y,n,m;
bool vizitat[L];
int tata[L];
int main()
{
f >> n >> m >> x >> y;
for(int i = 1; i <= m; i++){
f >> o >> p >> d;
vecini[p].push_back(make_pair(o,d));
vecini[o].push_back(make_pair(p,d));
}
// g << 1.0*(sizeof(vecini) + sizeof(q) + sizeof(tata) + sizeof(vizitat))/1024/1024;
/**BFS din x*/
q.push(x);
vizitat[x] = 1;
tata[x] = -1;
int ok = 0;
while(!q.empty() && ok == 0){
int curent = q.front();
for(int i = 0; i < vecini[curent].size(); i++){
if(vizitat[vecini[curent][i].first] == 0){
vizitat[vecini[curent][i].first] = 1;
tata[vecini[curent][i].first] = curent;
if(vecini[curent][i].first == y){
ok = 1;
break;
}
q.push(vecini[curent][i].first);
}
}
q.pop();
}
int j = y,s = 0;
while(tata[j] > 0){
if(j > tata[j]){
for(int i = 0; i < vecini[j].size(); i++){
if(vecini[j][i].first == tata[j]){
s += vecini[j][i].second;
}
}
}else{
for(int i = 0; i < vecini[j].size(); i++){
if(vecini[j][i].first == tata[j]){
s -= vecini[j][i].second;
}
}
}
j = tata[j];
}
g << s <<"\n";
return 0;
}