Cod sursa(job #831451)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 8 decembrie 2012 17:32:32
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<vector>
#include<queue>
#include<cstdio>
using namespace std;
int x,y,d,s,f,acum,n,m;
int viz[100005];
struct drum{ int u, c;}; //unde ajung, cat ma costa
deque  <int> q;
vector <drum> l[100050];
vector <int> nivel(30000,-1);
int main(){
	freopen("sate.in","r",stdin); freopen("sate.out","w",stdout);
	scanf("%d%d%d%d", &n, &m, &s, &f); //n sate, m drumuri
	for(int i=1;i<=m;++i){
		scanf("%d%d%d", &x, &y, &d);
		l[x].push_back(drum{y, d});
		l[y].push_back(drum{x,-d});
	}
	q.push_back(s); viz[s]=1; nivel[s]=0;
	while(!q.empty()){
		acum=q.front(); q.pop_front();
		viz[acum]=1;
		for(unsigned int i=0; i<l[acum].size(); ++i){
			if(viz[l[acum][i].u]==0){
				viz[l[acum][i].u]=1;
				nivel[l[acum][i].u]=nivel[acum]+l[acum][i].c;
				q.push_back(l[acum][i].u);
			}
		}
	}
	printf("%d\n", nivel[f]);
	return 0;
}