Pagini recente » Cod sursa (job #2865603) | Cod sursa (job #908018) | Cod sursa (job #1437715) | Cod sursa (job #2229956) | Cod sursa (job #2798379)
#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);
}
/*for( i = 0; i < n; i++ ){
out<<"numar nod: "<<i + 1<<" ";
for( int j = 0; j < noduri[i].next.size(); j++ )
out<<noduri[i].next[j] + 1<<" ";
out<<'\n';
}*/
}
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;
read_graph();
bfs(x);
out<<noduri[y].distanta<<" ";
return 0;
}