Cod sursa(job #2666416)

Utilizator ADINAIOANA-BORTAAdina Borta ADINAIOANA-BORTA Data 1 noiembrie 2020 19:23:25
Problema Sate Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>

using namespace std;

const int  NMAX = 100001;
vector<pair<int,int>> graf[NMAX];
int x,y;
bool vizitat[NMAX];
queue<int> coada;



void BFS(int x) {
	coada.push(x);
	vizitat[x] = true;
	while (!coada.empty()) {
		int curr = coada.front();
		coada.pop();
		for (int i = 0; i < graf[curr].size(); i++) {
			if (!vizitat[graf[curr][i].first]) {
				vizitat[graf[curr][i].first] = true;
				coada.push(graf[curr][i].first);
				int pozcurr, pozchild;
				for (int j = 0; j < graf[x].size(); j++) {
					if (graf[x][j].first == curr)
					{
						pozcurr = j;
						break;
					}
				}
				for (int j = 0; j < graf[curr].size(); j++) {
					if (graf[curr][j].first == graf[curr][i].first)
					{
						pozchild = j;
						break;
					}
				}
				if (curr > graf[curr][i].first) {
					graf[x].push_back(make_pair(graf[curr][i].first, graf[x][pozcurr].second - graf[curr][pozchild].second));
				}
				else {
					graf[x].push_back(make_pair(graf[curr][i].first, graf[x][pozcurr].second + graf[curr][pozchild].second));
				}
			}
		}
	}

}

int main() {
	ifstream in("sate.in");
	ofstream out("sate.out");
	int n, m, a, b, d;
	in >> n >> m >> x >> y;


	for (int i = 0; i < m; i++) {
		in >> a >> b >> d;
		graf[a].push_back(make_pair(b, d));
		graf[b].push_back(make_pair(a, d));
	}

	graf[x].push_back(make_pair(x, 0));


	//for (int i = 1; i <= n; i++) {
	//	cout << i << ": ";
	//	for (int j = 0; j < graf[i].size(); j++) {
	//		cout << graf[i][j]<<" ";
	//	}
	//	cout << endl;
	//}

	BFS(x);

	for (int i = 0; i < graf[x].size(); i++) {
		if (graf[x][i].first == y) {
			out << graf[x][i].second;
		}
	}


	return 0;
}