Cod sursa(job #3316603)

Utilizator herbiHreban Antoniu George herbi Data 19 octombrie 2025 13:46:06
Problema Sate Scor 0
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;
	vector<bool> inCoada(n + 1, false);
	queue<int> coada;
	coada.push(inceput);
	while(!coada.empty())
	{
		int nod = coada.back();
		coada.pop();
		inCoada[nod] = false;
		for(auto it: graf[nod])
		{
			int vecin = it.first;
			int cost = it.second;
			if(dist[vecin] == -1 || dist[vecin] > dist[nod] + cost)
			{
				dist[vecin] = dist[nod] + cost;
				if(!inCoada[vecin])
				{
					coada.push(vecin);
					inCoada[vecin] = true;
				}
			}
		}
	}
	fout << dist[final] << "\n";
	return 0;
}