Cod sursa(job #1197615)

Utilizator tudi98Cozma Tudor tudi98 Data 12 iunie 2014 23:28:16
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>

using namespace std;

#define dim 30005
#define ff first
#define ss second
#define pb push_back
#define mp make_pair

queue<int> Q;
bitset<dim> seen;
vector<pair<int,int> > v[dim];
int x,y,a,b,c,n,m,dist[dim];

void bfs(){

	Q.push(x);
	dist[x]=0;
	seen[x]=1;
	while(!Q.empty()){
		int u = Q.front();
		Q.pop();
		int d=dist[u];
		for(int i=0;i<int(v[u].size());i++){
			if(!seen[v[u][i].ff]){
				if(v[u][i].ff < x && v[u][i].ff < u)
						dist[v[u][i].ff]=d+v[u][i].ss;
				else if(v[u][i].ff < x && v[u][i].ff > u)
						dist[v[u][i].ff]=d-v[u][i].ss;
				else if(v[u][i].ff > x && v[u][i].ff < u)
						dist[v[u][i].ff]=d-v[u][i].ss;
				else dist[v[u][i].ff]=d+v[u][i].ss;
				Q.push(v[u][i].ff);
				seen[v[u][i].ff]=1;
			}
		}		
	}
} 






int main(){

	ifstream f("sate.in");
	ofstream g("sate.out");

	f >> n >> m >> x >> y;
	for(int i=1;i<=m;i++){
		f >> a >> b >> c;
		v[a].pb(mp(b,c));
		v[b].pb(mp(a,c));
	}

	bfs();
	g << dist[y];
}