Cod sursa(job #1835805)

Utilizator LizaSzabo Liza Liza Data 27 decembrie 2016 14:20:08
Problema Atac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <iostream>
#include <limits.h>
#include<queue>
using namespace std;

#define Nmax 22000
ifstream fin("atac.in");
ofstream fout("atac.out");
vector < pair <int,int> > PP;
int N, a[Nmax][Nmax],A,B,C,D,M,P,X,Y;

void RoyFloyd()
{
    int i, j, k;

    for(k = 1; k <=N; k++)
        for(i = 1; i <= N; i++)
            for(j = 1; j <= N; j++)
                if(i != j && a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]))
                    a[i][j] = min(a[i][k],a[k][j]);


}


 void Print()
 {

     for(int i=M-P; i<M; ++i)
     {
         fout<<a[PP[i].first][PP[i].second]<<"\n";
     }
 }
 void Pairs()
 {
      PP.push_back(make_pair(X,Y));

     for(int i=1;i<M;++i)
     {
         int Z=a[PP[i-1].first][PP[i-1].second];
         PP.push_back(make_pair((PP[i-1].first*A + PP[i-1].second*B) % N + 1,(PP[i-1].second*C + Z*D) % N + 1));

     }
 }
int main()
{
    fin >> N>>M>>P;
    int i, U,V;

    for(i = 2; i <=N; i++){
            fin>> U>>V;
            a[U][i]=V;
            a[i][U]=V;
    }
    fin>>X>>Y>>A>>B>>C>>D;



    RoyFloyd();

    Pairs();
    Print();
    return 0;
}