Pagini recente » Cod sursa (job #2840595) | Cod sursa (job #2076180) | Cod sursa (job #1775933) | Cod sursa (job #66400) | Cod sursa (job #957175)
Cod sursa(job #957175)
#include <fstream>
#include <list>
#include <vector>
#include <queue>
#define MAX 300002
#define fin "sate.in"
#define fout "sate.out"
using namespace std;
ifstream in(fin);
ofstream out(fout);
typedef pair<int,int> node;
int N,M,S,D,x,y,cost;
vector<node> edges[MAX];
vector<int> dist( MAX, 0 );
queue<int> q;
vector<bool> visited(MAX,0);
int main(){
in >> N >> M >> S >> D;
for( int i = 1; i <= M; i++ ){
in >> x >> y >> cost;
edges[x].push_back( node(y, cost));
edges[y].push_back( node(x, -cost));
}
visited[S] = 1;
q.push(S);
while( !q.empty() ){
bool flag = false;
int u = q.front();
q.pop();
for( unsigned i = 0 ; i < edges[u].size(); i++ ){
if( visited[edges[u][i].first] == 0 ){
visited[edges[u][i].first] = 1;
dist[edges[u][i].first] = dist[u] + edges[u][i].second;
q.push(edges[u][i].first);
}
if( visited[D] == 1){
flag = true;
break;
}
}
if( flag == true )
break;
}
out<< dist[D];
return 0;
}