Cod sursa(job #957175)

Utilizator lucky1992Ion Ion lucky1992 Data 4 iunie 2013 16:36:33
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#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;
}