Cod sursa(job #898666)

Utilizator iarbaCrestez Paul iarba Data 28 februarie 2013 11:18:32
Problema Atac Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#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=x%n+1;y=y%n+1;
					 }
return 0;
}