Cod sursa(job #2343015)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 13 februarie 2019 16:56:53
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define MAXN 30010
#define ll long long
#define pii pair<int,ll>
#define vii vector<pii>
#define F first
#define S second
using namespace std;

int n,m,x,y;
vii A[MAXN];
ll V[MAXN];

ofstream fout("sate.out");

void BFS(int x, int y){
	queue <int> q;
	q.push(y);
	while(!q.empty()){
		int f=q.front(),l=A[f].size();
		V[f]=-1;
		if(f==x){
			while(!q.empty())q.pop();
			break;
		} 
		for(int i=0;i<l;i++){
			if(!V[A[f][i].F])q.push(A[f][i].F);
		}
		q.pop();
	}
	q.push(x);
	V[x]=0;
	while(!q.empty()){
		int f=q.front(),l=A[f].size();
		if(f==y){
			return;
		} 
		for(int i=0;i<l;i++){
			if(V[A[f][i].F]==-1){
				q.push(A[f][i].F);
				if(f<A[f][i].F)V[A[f][i].F]=V[f]+A[f][i].S;
				else V[A[f][i].F]=V[f]-A[f][i].S;
			}
		}
		q.pop();
	}
}

int main(){
	freopen("sate.in","r",stdin);
	freopen("sate.out","w",stdout);
	scanf("%d %d %d %d",&n,&m,&x,&y);
	for(int i=0;i<=n;i++)V[i]=0;
	for(int i=0;i<m;i++){
		int a;
		pii p;
		scanf("%d %d %ll",&a,&p.F,&p.S);
		A[a].push_back(p);
		swap(a,p.F);
		A[a].push_back(p);
	}
	BFS(x,y);
	printf("%ll",V[y]);
	return 0;
}