Cod sursa(job #3211399)

Utilizator CalibrixkngIordache Andrei Calibrixkng Data 9 martie 2024 11:21:04
Problema Sate Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 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);
	}
}
int dist[NMAX];
int viz[NMAX];
void bfs(int target) {
	if (viz[target] == -1) {
		queue<int> q;
		dist[target] = dist[target - 1] + 1;
		viz[target] = 0;
		q.push(target);
		while (!q.empty()) {
			int nod = q.front();
			for (auto i : graf[nod]) {
				if (viz[i.end] == -1) {
					if (nod<i.end) {
						dist[i.end] = i.cost + dist[nod];
					}
					else
						dist[i.end] = dist[nod]-i.cost;
					q.push(i.end);
					viz[i.end] = 1;
				}
			}
			q.pop();
		}
	}
}
void afisare() {
	for (int i = 1; i <= n; i++) {
		cout << (dist[i]!=INF?dist[i]:-1) << " ";
	}
}
int main() {
	citire();
	for (int i = 1; i <= n; i++) {
		viz[i] = -1;
	}
	for (int i = 1; i <= n; i++)
		bfs(i);
	g << dist[e] - dist[start] << endl;

}