Pagini recente » Cod sursa (job #2291038) | Cod sursa (job #804091) | Cod sursa (job #2530985) | Cod sursa (job #2039753) | Cod sursa (job #2798415)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
const int MAXN = 100000;
int n, x, y;
struct nod{
vector<int> next;
vector<int> d;
int distanta;
};
nod noduri[MAXN + 1];
void read_graph(){
int m, i, k, j, dis;
in>>n>>m>>x>>y;
for( i = 0; i < m; i++ ){
in>>k>>j>>dis;
noduri[j].next.push_back(k);
noduri[k].next.push_back(j);
noduri[j].d.push_back(dis);
noduri[k].d.push_back(dis);
}
}
queue <int> q;
//vector<int> dis;
void bfs(int root){
int i, j;
for( i = 1; i <= n; i++ )
noduri[i].distanta = -1;
q.push(root);
noduri[root].distanta = 0;
while( !q.empty() ){
i = q.front();
for( j = 0; j < noduri[i].next.size(); j++ ){
if( noduri[noduri[i].next[j]].distanta == -1 ){
if( i > noduri[i].next[j] )
noduri[noduri[i].next[j]].distanta = noduri[i].distanta - noduri[i].d[j];
else
noduri[noduri[i].next[j]].distanta = noduri[i].distanta + noduri[i].d[j];
q.push(noduri[i].next[j]);
}
}
q.pop();
}
}
int main(){
int i;
ios_base::sync_with_stdio(false);
read_graph();
bfs(x);
out<<noduri[y].distanta<<" ";
return 0;
}