Cod sursa(job #1837490)

Utilizator LizaSzabo Liza Liza Data 29 decembrie 2016 19:24:31
Problema Atac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include <iostream>
#include <limits.h>
#include<queue>
using namespace std;

#define Nmax 32005
#define oo 2000000000
ifstream fin("atac.in");
ofstream fout("atac.out");
vector < pair <int,int> > PP;
vector < pair <int,int> > G[Nmax];
int N,A,B,C,D,M,P,X,Y,Use[Nmax],Z,ZZ[Nmax],z,j;
bool t=0;

void Read()
{
  fin>>N>>M>>P;
  for(int i = 2; i <= N; ++i)
    {
      int x,c,y;
      fin>>y>>c;
      G[i].push_back(make_pair(y,c));
      G[y].push_back(make_pair(i,c));
    }


}

void DFS(int Nod,int Y,int Z)
{
  Use[Nod] = 1; int R=Z;
  for(unsigned int i = 0; i < G[Nod].size(); ++i)
    {
     int Vecin =G[Nod][i].first;
      int cost=G[Nod][i].second;
      if(Vecin==Y){Z=min(Z,cost); z=Z;}
      else{
 Z=min(Z,cost);
  if(!Use[Vecin]){

        DFS(Vecin,Y,Z);

        }
      }
    }


Z=R;



}

 void Print()
 {

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

     for(int i=1;i<=M;++i)
     {

         for(int k=1; k<=Nmax; k++){
            Use[k]=0;
         }
          Z=oo;
         DFS(X,Y,Z);   j++; ZZ[j]=z;
         X=(PP[i-1].first*A + PP[i-1].second*B) % N + 1;
         Y=(PP[i-1].second*C + z*D) % N + 1;
         PP.push_back(make_pair(X,Y));
        z=0;
     }
 }
int main()
{
   Read();
    fin>>X>>Y>>A>>B>>C>>D;





    Pairs();

    Print();
    return 0;
}