Pagini recente » Cod sursa (job #146889) | Cod sursa (job #620574) | Cod sursa (job #49360) | Cod sursa (job #1155268) | Cod sursa (job #519626)
Cod sursa(job #519626)
# include <fstream>
# include <iostream>
# include <cstdio>
# include <vector>
# include <algorithm>
# define DIM 32003
# define pb push_back
# define min(a,b) a<b?a:b
using namespace std;
struct nod {
int i, c;
nod(){}
nod(int I, int C){
i=I;c=C;}
};
int n, m, p, A, B, C, D, X, Y, Z, t[20][DIM], b[20][DIM], gr[DIM];
vector<nod>G[DIM];
void read ()
{
ifstream fin ("atac.in");
fin>>n>>m>>p;
int u, v;
for(int i=1;i<n;++i)
{
t[0][i+1]=-1;
fin>>u>>v;
G[u].pb(nod(i+1, v));
G[i+1].pb(nod(u, v));
}
fin>>X>>Y>>A>>B>>C>>D;
}
void DF (int k)
{
for(vector<nod>::iterator I=G[k].begin();I<G[k].end();++I)
if (t[0][I->i]==-1)
{
gr[I->i]=gr[k]+1;
t[0][I->i]=k;
b[0][I->i]=I->c;
DF(I->i);
}
}
void comp ()
{
DF(1);
int cont=1;
for(int i=1;cont;++i)
{
cont=0;
for(int j=1;j<=n;++j)
if (t[i-1][t[i-1][j]])
{
cont=1;
t[i][j]=t[i-1][t[i-1][j]];
b[i][j]=min(b[i-1][j],b[i-1][t[i-1][j]]);
}
}
}
int bmb ()
{
int x, y, sol=10*DIM, mij=15;
if (gr[X]<gr[Y])x=X, y=Y;
else x=Y, y=X;
while (gr[x]!=gr[y])
{
if (t[mij][y] && gr[t[mij][y]]==gr[x])
sol=min(sol,b[mij][y]), y=t[mij][y];
else
if (t[mij][y] && gr[t[mij][y]]>gr[x])
sol=min(sol,b[mij][y]), y=t[mij][y], mij=15;
else
mij/=2;
}
int cont=1;
if (x==y)cont=0;
while (cont)
{
if (t[0][x]==t[0][y])
sol=min(sol,(min(b[0][x],b[0][y]))), cont=0;
else
{
mij=15;
while (!t[mij][x] || t[mij][x]==t[mij][y])
mij/=2;
sol=min(sol,(min(b[mij][x],b[mij][y])));
x=t[mij][x];
y=t[mij][y];
}
}
return sol;
}
void solve ()
{
freopen("atac.out", "w", stdout);
for(int i=1;i<=m;++i)
{
Z=bmb();
X=(X*A+Y*B)%n+1;
Y=(Y*C+Z*D)%n+1;
if (i>=m-p+1)printf("%d\n", Z);
}
}
int main ()
{
read ();
comp ();
solve ();
return 0;
}