Cod sursa(job #878337)

Utilizator swim406Teudan Adina swim406 Data 14 februarie 2013 12:51:32
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include<stdio.h>

using namespace std;

/*int N, M, K, i, C[2001], D[2001][2001], x, y;

int main() {
	freopen ("ubuntzei.in", "r", stdin);
	freopen ("ubuntzei.out", "w", stdout);
	scanf ("%d %d %d", &N, &M, &K);
	for (i = 1; i <= K; ++i)
		scanf ("%d", &C[i]);
	for (i = 1; i <= M; ++i) {
		scanf ("%d %d %d", &x, &y, &D[x][y]);
		drum[y][x] = D[x][y];
	}
	void dijkstra(int x0)
{
    int i, j, min, k, ok;
    int viz[NMAX], d[NMAX], tata[NMAX];
    for (i = 1; i<=n; i++) {
        d[i] = C[x0][i];
        tata[i] = x0;
        viz[i] = 0;
    }
    tata[x0] = 0;
    viz[x0] = 1; ok = 1;
    while (ok) {
        min = INFINIT;
        for (i = 1; i<=n; i++)
            if (!viz[i] && min>d[i]) {
                min = d[i];
                k = i;
            }
        if (min != INFINIT) {
            viz[k] = 1;
            for (i = 1; i<=n; i++)
               if (!viz[i] && d[i]>d[k]+C[k][i]) {
                   d[i] = d[k]+C[k][i];
                   tata[i] = k;
               }
        }
        else ok = 0;
    }
}
	return 0;
}
*/


int N, M, K, i, loc[2001], a[2001][2001], x, y, k, j;

int main() {
	freopen ("ubuntzei.in", "r", stdin);
	freopen ("ubuntzei.out", "w", stdout);
	scanf ("%d %d %d", &N, &M, &K);
	for (i = 1; i <= K; ++i)
		scanf ("%d", &loc[i]);
	for (i = 1; i <= M; ++i)
		scanf ("%d %d %d", &x, &y, &a[x][y]);
	for (k = 1; k <= N; k++)
		for (i = 1; i <= N; i++)
			for (j = 1; j <= N; j++)
				if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) 
					a[i][j] = a[i][k] + a[k][j];
	/*for (i = 1; i <= N; ++i) {
		for (j = 1; j <= N; ++j)
			printf("%d ", a[i][j]);
		printf("\n");
	}*/
	printf("%d\n", a[1][N]);
	return 0;
}