Pagini recente » Cod sursa (job #234540) | Cod sursa (job #1550218) | Cod sursa (job #1105157) | Cod sursa (job #120618) | Cod sursa (job #898644)
Cod sursa(job #898644)
#include <cstdio>
using namespace std;
long niv[32001],dist[32001],par[32001],x,y,n,m,p,i,a,b,c,d,z;
int calculeaza(int x,int y)
{
long min=1000000000;
while(niv[x]>niv[y]){if(dist[x]<min){min=dist[x];}x=par[x];}
while(niv[y]>niv[x]){if(dist[y]<min){min=dist[y];}y=par[y];}
while(x!=y){
if(dist[x]<min){min=dist[x];}
if(dist[y]<min){min=dist[y];}
y=par[y];x=par[x];
}
return min;
}
int main()
{
freopen("atac.in","r",stdin);
freopen("atac.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&p);
niv[1]=1;
for(i=2;i<=n;i++){
scanf("%ld%ld",&x,&y);
par[i]=x;
dist[i]=y;
niv[i]=niv[x]+1;
}
scanf("%ld%ld%ld%ld%ld%ld",&x,&y,&a,&b,&c,&d);
for(i=1;i<=m;i++){
z=calculeaza(x,y);
if(z==1000000000){z=0;}
if(i>m-p){printf("%ld\n",z);}
x=x*a+y*b;
y=y*c+z*d;
x%=n;y%=n;
}
return 0;
}