Pagini recente » Cod sursa (job #1846555) | Cod sursa (job #151299) | Cod sursa (job #1376596) | Cod sursa (job #105772) | Cod sursa (job #1045604)
//VASS PETER 2013-12-1
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <list>
#include <climits>
#define s ' '
using namespace std;
struct edge{
int n;//node
int c;//cost
};
int main(){
ifstream ifs("sate.in");
ofstream ofs("sate.out");
int M,N,X,Y;
ifs>>N>>M>>X>>Y;
X--;Y--;
vector<list<edge> > g(N);
for(int i=0;i<M;i++){
edge e;int x,y;
ifs>>x>>y>>e.c;x--;y--;
e.n=y;
g[x].push_back(e);
e.n=x;
g[y].push_back(e);
}
vector<long> cost(N,LONG_MIN);
cost[X]=0;
queue<int> q; q.push(X);
while(!q.empty()){
int f=q.front();q.pop();
if(f==Y) break;
for(list<edge>::iterator it=g[f].begin();it!=g[f].end();it++){
if(cost[it->n]==LONG_MIN){
q.push(it->n);
int sgn=1;
if(f>it->n) sgn=-1;
cost[it->n]=cost[f]+it->c*sgn;
}
}
}
ofs<<cost[Y]<<"\n";
}