Pagini recente » Cod sursa (job #1401041) | Cod sursa (job #2578997) | Cod sursa (job #2480005) | Cod sursa (job #2667652) | Cod sursa (job #2644268)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("atac.in");
ofstream out("atac.out");
int r,n,m,p,lg[32001],str[16][32001],mini[16][32001],lista[32001],val[32001],nxt[32001],cost[32001],d[32001],h[32001];
bool viz[32001];
void stramosi()
{
int i,log;
for(log=1;(1<<log)<=n;++log)
for(i=1;i<=n;++i){
str[log][i]=str[log-1][str[log-1][i]];
mini[log][i]=min(mini[log-1][i], mini[log-1][str[log-1][i]]);
}
}
int dfs(int nod)
{
if(!h[nod])
return dfs(str[0][nod]) + 1;
return h[nod];
}
int query(int x,int y)
{
if(x==y)
return 0;
int m,pas;
m=0x3f3f3f3f;
if(h[x]<h[y])
swap(x,y);
pas=lg[h[x]-h[y]];
for(;pas>=0;--pas)
if(h[str[pas][x]]>=h[y])
{
m=min(m,mini[pas][x]);
x=str[pas][x];
}
if(x==y)
return m;
for(pas=lg[h[y]];pas>=0;--pas)
if(str[pas][x]!=str[pas][y])
{
m=min(m,min(mini[pas][x],mini[pas][y]));
x=str[pas][x];
y=str[pas][y];
}
m=min(m,min(mini[0][x],mini[0][y]));
return m;
}
int main()
{
int i,x,y,X,Y,A,B,C,D,Z;
in>>n>>m>>p;
lg[2]=1;
for(i=3;i<=n;++i)
lg[i]=lg[i/2]+1;
for(i=2;i<=n;++i)
{
in>>x>>y;
str[0][i]=x;
mini[0][i]=y;
}
in>>X>>Y>>A>>B>>C>>D;
h[1]=1;
for(i=2;i<=n;++i)
h[i]=dfs(i);
stramosi();
for(i=1;i<=m;++i)
{
Z=query(X,Y);
if(i>=m-p+1)
out<<Z<<"\n";
X=(X*A+Y*B)%n+1;
Y=(Y*C+Z*D)%n+1;
}
return 0;
}