Pagini recente » Cod sursa (job #2553151) | Cod sursa (job #2673073) | Cod sursa (job #1670878) | Cod sursa (job #2861807) | Cod sursa (job #2798387)
#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];
FILE *fin, *fout;
void read_graph(){
int m, i, k, j, dis;
fin = fopen( "sate.in", "r" );
fscanf(fin, "%d%d%d%d", &n, &m, &x, &y);
//in>>n>>m>>x>>y;
for( i = 0; i < m; i++ ){
fscanf(fin, "%d%d%d", &k, &j, &dis);
//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);
}
fclose(fin);
}
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(){
read_graph();
bfs(x);
fout = fopen( "sate.out", "w" );
fprintf(fout, "%d", noduri[y].distanta);
//out<<noduri[y].distanta<<" ";
fclose(fout);
return 0;
}