Cod sursa(job #3211364)

Utilizator CalibrixkngIordache Andrei Calibrixkng Data 9 martie 2024 10:50:51
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
const int NMAX = 3e4;
const int INF = 1e6;

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

int n, m, start, e;

struct muchie {
	int end, cost;
};
vector<muchie> graf[NMAX];

void add(int a, int b, int c) {
	muchie m;
	m.end = b;
	m.cost = c;
	graf[a].push_back(m);
	m.end = a;
	graf[b].push_back(m);
}
void citire() {
	f >> n >> m >> start >> e;
	for (int i = 0; i < n; i++) {
		int x, y, z;
		f >> x >> y >> z;
		add(x, y, z);
	}
}
queue<int> q;
int viz[NMAX];
void bfs(int target) {
	for (int i = 1; i <= n; i++) {
		viz[i] = INF;
	}
	viz[target] = 0;
	q.push(target);
	while (!q.empty()) {
		int nod = q.front();
		q.pop();
		for (auto i : graf[nod]) {
			if (viz[i.end] == INF) {
				q.push(i.end);
				//daca nodu de unde vine este mai mic viz=cost-viz[nod]
				//daca nodu e mai mare viz=cost+viz[nod]
				if (viz[nod] < i.cost) {
					viz[i.end] = i.cost + viz[nod];
				}
				else
					viz[i.end] = viz[nod]-i.cost;
			}
		}
	}
}
void afisare() {
	for (int i = 1; i <= n; i++) {
		cout << (viz[i]!=INF?viz[i]:-1) << " ";
	}
}
int main() {
	citire();
	bfs(start);
	g << viz[e];

}