Cod sursa(job #784263)

Utilizator Mitza444Vidrean Mihai Mitza444 Data 5 septembrie 2012 13:59:55
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
#define pp pair<int,int>
#define ff first
#define ss second
vector <pp> v[30001];
queue <int> Q;
int n,m,x,y;
int cost[30001];
void BFS(){
	int curr;
	unsigned i;
	cost[x]=1;
	if(x==y)
		return;
	Q.push(x);
	while(!Q.empty()){
		curr=Q.front();
		for(i=0;i<v[curr].size();i++){
			if(cost[v[curr][i].ff]==0){
				Q.push(v[curr][i].ff);
				cost[v[curr][i].ff]=cost[curr]+v[curr][i].ss;
				if(v[curr][i].ff==y)
					return;
			}
		}
		Q.pop();
	}
}
int main(){
	int i,xx,yy,c;
	freopen("sate.in","r",stdin);
	scanf("%d%d%d%d",&n,&m,&x,&y);
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&xx,&yy,&c);
		v[xx].push_back(make_pair(yy,c));
		v[yy].push_back(make_pair(xx,-c));
	}
	fclose(stdin);
	BFS();
	freopen("sate.out","w",stdout);
	printf("%d\n",cost[y]-1);
	fclose(stdout);
	return 0;
}