Cod sursa(job #29150)

Utilizator skyelHighScore skyel Data 8 martie 2007 18:20:15
Problema Atac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream.h>
#define input_file "atac.in"
#define output_file "atac.out"
#define Nmax 325
#define Pmax 500
#define Mmax 50000



int n,p,t[1000][1000],prs[Mmax][3],a,b,c,d,ro,viz[1000];
long m;
int cost(int x,int y,int k)
	{
	int i;
	viz[x]=1;
	if(x!=y)
		{
		for(i=1;i<=n;i++)
			if(t[x][i]!=0)
				if(viz[i]!=1)
					{
					viz[i]=1;
					if(k==0)
						k=t[x][i];
					else
						if(k>t[x][i])
							k=t[x][i];
					cost(i,y,k);
					}
		}
	else
		if(ro==0)
			ro=k;
		else
			ro+=k;
	return 0;
	}

int main()
	{
	int i,j,k,x,y,z;
	ifstream in(input_file);
	ofstream out(output_file);
	in>>n>>m>>p;
	for(i=1;i<n;i++)
		{
		in>>x;
		in>>y;
		t[x][i+1]=t[i+1][x]=y;
		}
	in>>x>>y>>a>>b>>c>>d;
	prs[1][0]=x;
	prs[1][1]=y;
	ro=0;
	cost(prs[1][0],prs[1][1],0);
	prs[1][2]=ro;
	for(i=2;i<=m;i++)
		{
		memset(viz,0,(sizeof(viz)));
		prs[i][0]=((prs[i-1][0]*a+prs[i-1][1]*b)%n)+1;
		prs[i][1]=((prs[i-1][1]*c+prs[i-1][2]*d)%n)+1;
		ro=0;
		cost(prs[i][0],prs[i][1],0);
		prs[i][2]=ro;
		if(i>(m-p))
			out<<prs[i][2]<<"\n";
		}
	in.close();
	out.close();
	return 0;
	}