Cod sursa(job #7150)

Utilizator SpiriSpiridon Alexandru Spiri Data 21 ianuarie 2007 12:51:21
Problema Radiatie Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.62 kb
#include <fstream>
#include <vector>
using namespace std;
#define MAX 15001
#define INF 1000000001

//ifstream fin ("radiatie.in");
//ofstream fout ("radiatie.out");

FILE *fin = fopen("radiatie.in", "r");
FILE *fout = fopen("radiatie.out", "w");

int n, m, k;
vector<vector<long long int> > c;

void RF();

int main()
{
//    fin >> n >> m >> k;
    fscanf(fin,"%d%d%d",&n,&m,&k);  
    int v1, v2, co;
    c.resize(n+1);
    for ( int i = 1; i <= n; i++ )
    {
        c[i].resize(n+1);
        c[i][i] = INF;
        for ( int j = 1; j <= n; j++ )
        {
            c[i][j] = INF;
        }
    }
    for ( int i = 1; i <= m; i++ )
    {
    //    fin >> v1 >> v2 >> co;
        fscanf(fin,"%d%d%d",&v1,&v2,&co);  
        c[v1][v2] = co;
        c[v2][v1] = co;
    }
    
    RF();
    for ( int i = 1; i <= k; i++ )
    {
    //    fin >> v1 >> v2;
        fscanf(fin,"%d%d",&v1,&v2);  
    //    fout << c[v1][v2] << "\n";
        fprintf(fout,"%d\n", c[v1][v2]);
    } 
    fclose(fin);
    fclose(fout);
    
    return 0;
}

void RF()
{
	for(int k = 1; k <= n; k++)
	{
		for(int i = 1; i <= n; i++)
		{
           for(int j = 1; j <= n; j++)
		   {
               if ( c[i][k] > c[k][j] )
			   {
                    if ( c[i][j] > c[i][k] )
                    {
                         c[i][j] = c[i][k];
                    }
               }
               else
               {
                   if ( c[i][j] > c[k][j] )
                   {
                        c[i][j] = c[k][j];
                   }
               }
           }
        }
    }
}