Pagini recente » Cod sursa (job #2274641) | Cod sursa (job #588519) | Cod sursa (job #2002627) | Cod sursa (job #3140367) | Cod sursa (job #1549888)
#include <fstream>
#include <vector>
#include <queue>
#define L 31600
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++){
int ales = vecini[curent][i].first;
if(vizitat[ales] == 0){
vizitat[ales] = 1;
tata[ales] = curent;
if(ales == y){
ok = 1;
break;
}
q.push(ales);
}
}
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;
}