Pagini recente » Cod sursa (job #1125111) | Cod sursa (job #2074012) | Cod sursa (job #1332639) | Cod sursa (job #1876098) | Cod sursa (job #1205018)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("atac.in");
ofstream o("atac.out");
const int inf = 1000000000;
int n,m,y,x,a,b,c,d,p,t[32200],v[32100],l[32100],di[20][32020],pi[20][32009];
int lca(int q,int p){
if(l[q]>l[p])swap(p,q);
int log1,log2;
for(log1=0;(1<<log1)<=l[p];log1++);log1--;
for(log2=0;(1<<log2)<=l[q];log2++);log2--;
int minim=inf;
for(int i=log1;i>=0;i--)
if(l[q]<=l[p] - (1<<i)) {
minim = min(minim,pi[i][p]);
p = di[i][p];
}
if(p==q)return minim;
for(int i=log2;i>=0;i--)
if(di[i][q]!=di[i][p] && di[i][p]!=0 ) {
minim = min(minim,min(pi[i][q],pi[i][p]));
p = di[i][p];
q = di[i][q];
}
return min(minim,min(v[q],v[p]));
}
int main(){
f>>n>>m>>p;
l[1]=0;
int lmax=1;
for(int i=2;i<=7;i++){
f>>x>>y;
t[i]=x;
v[i]=y;
l[i] = l[x]+1;
lmax=max(lmax,l[i]);
}
v[1]=inf;
t[1]=0;
for(int j=1;j<=n;j++)pi[0][j] = v[j], di[0][j]=t[j];
for(int i=1;(1<<i)<=lmax;i++){
for(int j=1;j<=n;j++)
{
pi[i][j] = min(pi[i-1][j],di[i-1][j]!=0?pi[i-1][di[i-1][j]]:inf);
di[i][j] = di[i-1][j]!=0 ? di[i-1][di[i-1][j]] : 0;
}
}
/* for(int i=0;(1<<i)<=lmax;i++){
for(int j=1;j<=n;j++)
{
o<<di[i][j]<<" ";
}
o<<endl;
}
o<<endl;
for(int i=0;(1<<i)<=lmax;i++){
for(int j=1;j<=n;j++)
{
o<<pi[i][j]<<" ";
}
o<<endl;
}
*/
f>>x>>y>>a>>b>>c>>d;
int z,y1,x1;
for(int i=1;i<=m ;i++){
z = lca(x,y);
if(m-p<i)o<<z<<"\n";
x1 = (a*x+b*y)%n+1;
y1 = (y*c+d*z)%n+1;
y=y1;x=x1;
}
}