Pagini recente » Mihnea Andreescu | Cod sursa (job #1887987) | Diferente pentru autumn-warmup-2007/solutii/runda-3 intre reviziile 53 si 28 | Profil MihaelaCismaru | Cod sursa (job #1321489)
#include <cstdio>
#include <vector>
#include <utility>
#include <queue>
using namespace std;
#define pb push_back
#define mp make_pair
#define Nmax 30001
FILE *f=fopen ("sate.in","r");
FILE *g=fopen ("sate.out","w");
struct muchie{
int nod, cost;
};
queue < muchie > Q;
vector < pair <int,int> > G[Nmax];
int N, M;
bool inQ[Nmax];
int BFS (int start, int finish){
muchie aux, aux1;
vector < pair <int,int> > :: iterator it;
aux.nod = start;
aux.cost = 0;
Q.push(aux);
inQ[start] = 1;
while ( !Q.empty() ){
aux = Q.front();
Q.pop();
inQ[aux.nod] = 0;
for (it = G[aux.nod].begin(); it < G[aux.nod].end(); ++it){
if (!inQ[it -> first]){
aux1.nod = it -> first;
aux1.cost = aux.cost + (it -> first > aux.nod ? it -> second : -it -> second);
if (aux1.nod == finish)
return aux1.cost;
Q.push (aux1);
inQ[aux1.nod] = 1;
}
}
}
}
int main(){
int start, finish, x, y, c;
fscanf (f,"%d%d%d%d",&N,&M,&start,&finish);
for (int i = 1; i <= M ; ++i){
fscanf (f,"%d%d%d",&x,&y,&c);
G[x].pb ( mp (y,c) );
G[y].pb ( mp (x,c) );
}
fprintf (g,"%d",BFS (start, finish) );
return 0;
}