Cod sursa(job #3316607)

Utilizator herbiHreban Antoniu George herbi Data 19 octombrie 2025 13:51:01
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m, inceput, final;
typedef pair<int, int> pereche;
int main()
{
	fin >> n >> m >> inceput >> final;
	vector<vector<pereche>> graf(n + 1);
	for(int i= 0; i < m; i++)
	{
		int x, y, cost;
		fin >> x >> y >> cost;
		graf[x].push_back({y, cost});
		graf[y].push_back({x, -cost});
	}
	///trebuie sa gasesc costul de la inceput la final
	vector<int> dist(n + 1,-1);
	dist[inceput] = 0;
	priority_queue<pereche, vector<pereche>, greater<pereche>> coada;
	coada.push({ 0, inceput });
	while (!coada.empty())
	{
		int nod = coada.top().second;
		int cost = coada.top().first;
		coada.pop();
		for (auto vecin : graf[nod])
		{
			int nod_urmator = vecin.first;
			int cost_urmator = vecin.second;
			if (dist[nod_urmator] == -1)
			{
				dist[nod_urmator] = dist[nod] + cost_urmator;
				coada.push({ dist[nod_urmator], nod_urmator });
			}
		}
	}
	fout << dist[final] << "\n";
	return 0;
}