Cod sursa(job #1304751)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 29 decembrie 2014 11:28:32
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<fstream>
#include<vector>
using namespace std;
int n, m, x, y, i, j, p, u, a, b, c;
vector<pair<int, int>> v[30001];
pair<int, int> val;
int s[30001], d[30001];
ifstream fin("sate.in");
ofstream fout("sate.out");
int main(){
	fin>> n >> m >> x >> y;
	for(i = 1; i <= m; i++){
		fin>> a >> b >> c;
		val.first = b;
		val.second = c;
		v[a].push_back(val);
		val.first = a;
		v[b].push_back(val);
	}
	p = 1;
	for(i = 0; i < v[x].size(); i++){
		s[++u] = v[x][i].first;
		d[v[x][i].first] = v[x][i].second;
	}
	while(p <= u){
		for(i = 0; i < v[s[p]].size(); i++){
			if(d[v[s[p]][i].first] == 0){
				if(x < s[p]){
					if(v[s[p]][i].first > s[p]){
						d[v[s[p]][i].first] = v[s[p]][i].second + d[s[p]];
					}
					else{
						if(x < v[s[p]][i].first){
							d[v[s[p]][i].first] = d[s[p]] - v[s[p]][i].second;
						}
						else{
							d[v[s[p]][i].first] = v[s[p]][i].second - d[s[p]];
						}
					}
				}
				else{
					if(v[s[p]][i].first > s[p]){
						if(x > v[s[p]][i].first){
							d[v[s[p]][i].first] = d[s[p]] - v[s[p]][i].second;
						}
						else{
							d[v[s[p]][i].first] = v[s[p]][i].second - d[s[p]];
						}
					}
					else{
						d[v[s[p]][i].first] = v[s[p]][i].second + d[s[p]];
					}
				}
				if(v[s[p]][i].first == y){
					break;
				}
				else{
					s[++u] = v[s[p]][i].first;
				}
			}
		}
		p++;
	}
	fout<< d[y];
	return 0;
}