Pagini recente » Cod sursa (job #1092199) | Cod sursa (job #785170) | Cod sursa (job #12459) | Cod sursa (job #1933238) | Cod sursa (job #496890)
Cod sursa(job #496890)
#include<stdio.h>
#include<vector>
#include<deque>
#include<algorithm>
using namespace std;
FILE*f=fopen("sate.in","r");
FILE*g=fopen("sate.out","w");
int c,N,M,X,Y,x,p,viz[30005],aux;
struct s{
int vecin;
int dist;
} y;
vector<s>W[30005];
deque<int>coada;
deque<int>cost;
int main () {
fscanf(f,"%d %d %d %d",&N,&M,&X,&Y);
while( M-- ){
fscanf(f,"%d %d %d",&x,&y.vecin,&y.dist);
W[x].push_back(y);
aux = y.vecin;
y.vecin = x; y.dist = -y.dist;
W[aux].push_back(y);
}
coada.push_back(X);
cost.push_back(0);
viz[X] = 1;
vector<s>::iterator itt;
while ( !coada.empty() ) {
p = *coada.begin();
c = *cost.begin();
if( p == Y )
break;
for( itt = W[p].begin() ; itt != W[p].end(); ++itt ){
if ( ! viz[ (*itt).vecin ] ){
viz[(*itt).vecin] = 1;
coada.push_back((*itt).vecin);
cost.push_back(c + (*itt).dist);
}
}
coada.pop_front();
cost.pop_front();
}
fprintf( g,"%d\n",c );
fclose(f);
fclose(g);
return 0;
}