Cod sursa(job #1772860)

Utilizator DobosDobos Paul Dobos Data 7 octombrie 2016 08:55:29
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <bits/stdc++.h>

const int NMAX = 105;

using namespace std;

ifstream fin("coach.in");
ofstream fout("coach.out");

int M[NMAX][NMAX],N[NMAX][NMAX],V[NMAX][NMAX],v[NMAX][NMAX];
int D[NMAX],C[NMAX],P[NMAX];


void Coach(int n,int T){


    for(int o = 1; o <= n; o ++){

        for(int i = o; i <= n; i++)
            for(int j = o; j <= n; j ++){
                M[C[i]][C[j]] = N[C[i]][C[j]];
                V[C[i]][C[j]] = max(P[C[i]],P[C[j]]);
                v[C[i]][C[j]] = min(P[C[i]],P[C[j]]);
            }



        for(int i = o; i <= n; i++)
            for(int j = o; j <= n; j ++)
                for(int k = o; k <= n; k ++){
                    if((M[C[i]][C[j]] > M[C[i]][C[k]] + M[C[k]][C[j]]  || M[C[i]][C[j]] == 0 ) &&  i != j &&  M[C[i]][C[k]] && M[C[k]][C[j]]){

                        M[C[i]][C[j]] = M[C[i]][C[k]] + M[C[k]][C[j]];
                        V[C[i]][C[j]] = max(V[C[i]][C[k]],V[C[k]][C[j]]);
                        v[C[i]][C[j]] = min(v[C[i]][C[k]],v[C[k]][C[j]]);
                        if(M[C[i]][C[j]] == T){
                            fout << C[i] << " " << C[j] << " " << v[C[i]][C[j]] << " " << V[C[i]][C[j]];
                            return ;
                        }
                    }

        }


     /*               for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++)
            fout << M[i][j] << " ";
        fout << "\n";

    }
     fout << "\n" << "\n";

    */
    }

}



int main()
{
    ios :: sync_with_stdio(false);
    fin.tie(NULL);

    int n,m,T,x,y,c,mn,p,aux,mx;

    fin >> n >> m >> T;

    for(int i = 1; i <= n; i++){
        fin >> P[i];
        C[i] = i;
    }
    for(int i  = 1; i <= m; i++){
        fin >> x >> y >> c;
        M[x][y] = N[x][y] = c;
    }


    for(int i = 1; i < n; i ++){
        mn = P[i]; p = i;
        for(int j  = i + 1; j <= n; j ++)
            if(P[j] < mn){
                mn = P[j];
                p = j;
            }

        aux = P[i];
        P[i] = mn;
        P[p] = aux;
        aux = C[i];
        C[i] = p;
        C[p] = aux;

    }


    Coach(n,T);

    return 0;
}