Cod sursa(job #1045602)

Utilizator petiVass Peter peti Data 1 decembrie 2013 19:45:24
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
//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";
}