Pagini recente » Cod sursa (job #233482) | Cod sursa (job #1761826) | Cod sursa (job #807987) | Cod sursa (job #1396444) | Cod sursa (job #1278892)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
const int NMAX= 30000;
struct GRAF{
int vf, cost;
};
vector <GRAF> d[NMAX+1];
queue <GRAF> q;
bool viz[NMAX+1];
int Rasp= 0, gata= 1, X, S, R[NMAX+1];
int main()
{
int N,M, a,b,c;
GRAF nr;
in>>N>>M >> X>>S;
if( X>S ){
int ff= X;
X= S;
S= ff;
}
for(int i=1; i<=M; i++){
in>>a>>b>>c;
nr.vf= b; nr.cost= c;
d[a].push_back(nr);
nr.vf= a;
d[b].push_back(nr);
}
nr.vf= X; nr.cost= 0;
R[ X ]= 0;
viz[X]= 1;
q.push(nr);
while( !q.empty() ){
GRAF aux= q.front();
int lg= (int)d[aux.vf].size();
for(int i=0; i<lg; i++){
int x= d[aux.vf][i].vf, xcost= d[aux.vf][i].cost;
if( viz[x]==0 ){
if( aux.vf < x ) {
R[x]= R[aux.vf] + xcost;
}
else R[x]= R[aux.vf] - xcost;
q.push( d[aux.vf][i] );
viz[x]= 1;
}
}
q.pop();
}
out << R[S] << '\n';
in.close();
out.close();
return 0;
}