Cod sursa(job #1980429)

Utilizator vlcmodanModan Valentin vlcmodan Data 13 mai 2017 01:08:32
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<vector>

#define N 50001
using namespace std;


int n, m;

int result[N];
typedef struct punct
{
	int y;
	int val;
};
vector<vector<punct>> a(N);


void read()
{

	scanf("%d %d", &n, &m);

	for (int i = 2; i <= n; i++)
	{
		result[i] = -1;
	}
	for (int t = 1; t <= m; t++)
	{
		int x, y, val;
		punct q;
		scanf("%d %d %d", &x, &y, &val);
		q.y = y;
		q.val = val;

		a[x].push_back(q);

	}
}

void eff(int x)
{
	for (int i = 0; i < a[x].size(); i++)
	{
		int y = a[x][i].y;
		int nr = result[x] + a[x][i].val;
		if ( nr < result[y] ||result[y]==-1)
		{
			result[y] = nr;
			eff(y);
		}
	}
}
void solve()
{
	eff(1);
}

void display()
{
	for (int i = 2; i <= n; i++)
	{
		if (result[i] == -1)
		{
			printf("0 ");
		}
		else
		{
			printf("%d ", result[i]);
		}
	}
}
int main()
{
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);

	read();
	solve();
	display();

	

	return 0;
}