Cod sursa(job #431025)

Utilizator swift90Ionut Bogdanescu swift90 Data 31 martie 2010 16:09:22
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define fs first
#define sc second
typedef pair<int,int> PII;
vector<PII> nr[30010];
int N,M,X,Y,dist[30010],INF=1<<30;
void BF(){
	int i,x;
	queue<int> Q;
	Q.push(X);
	for(i=0;i<=N;++i)
		dist[i]=INF;
	dist[X]=0;
	while(!Q.empty()){
		x=Q.front();
		Q.pop();
		for(vector<PII>::iterator it=nr[x].begin();it!=nr[x].end();++it){
			if(dist[it->fs]!=INF)
				continue;
			if(it->fs>x)
				dist[it->fs]=dist[x]+it->sc;
			else
				dist[it->fs]=dist[x]-it->sc;
			Q.push(it->fs);
			if(it->fs==Y)
				return;
		}
	}
}
int main(){
	freopen("sate.in","r",stdin);
	freopen("sate.out","w",stdout);
	int i,x,y,c;
	scanf("%d%d%d%d",&N,&M,&X,&Y);
	for(i=0;i<M;++i){
		scanf("%d%d%d",&x,&y,&c);
		nr[x].push_back(PII(y,c));
		nr[y].push_back(PII(x,c));
	}
	BF();
	printf("%d\n",dist[Y]);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}