Cod sursa(job #1053714)

Utilizator Robert29FMI Tilica Robert Robert29 Data 12 decembrie 2013 21:56:29
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.09 kb
#include<stdio.h>
#include<vector>
#include<queue>
#define dim 30000
using namespace std;

inline int comp(int x, int y)
{
	if (x < y)
		return 1;
	return -1;
}

int main()
{
	FILE*f = fopen("sate.in", "r");
	FILE*g = fopen("sate.out", "w");

	int n, m, X, Y;
	fscanf(f, "%d %d %d %d", &n, &m, &X, &Y);
	if (X>Y)
		swap(X, Y);

	int x, y, l;
	vector<pair<int, int> >v[dim + 1];
	for (int i = 1; i <= m; ++i)
	{
		fscanf(f, "%d%d%d", &x, &y, &l);
		v[x].push_back(make_pair(y, l));
		v[y].push_back(make_pair(x, l));
	}

	bool viz[dim + 1];
	for (int i = 1; i <= n; ++i)
		viz[i] = false;
	int dist[dim + 1];
	viz[X] = true;
	dist[X] = 0;
	queue<int> q;

	q.push(X);

	while (!q.empty())
	{
		int nod = q.front();

		for (auto vecin : v[nod])
		{
			if (!viz[vecin.first])
			{
				q.push(vecin.first);
				dist[vecin.first] = dist[nod] + comp(nod, vecin.first)*vecin.second;
				viz[vecin.first] = true;
				if (vecin.first == Y)
				{
					fprintf(g, "%d", dist[Y]);
					return 0;
				}
			}
		}
		q.pop();
	}


	fclose(f);
	fclose(g);
	return 0;
}