Cod sursa(job #471444)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 18 iulie 2010 22:52:08
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<fstream>
#define maxstr 19 

using namespace std;

int n,m;
vector<int> v[250001];
int stramosi[250001][maxstr];

void df2(int);

void df1()
{
	for(int i=1;i<=n;i++)
	{
		if(stramosi[i][0]==0)
			df2(i);
	}
}

void df2(int rad)
{
	int i,j;

	if(stramosi[rad][0]!=0)
	{
		int curent;
		curent=stramosi[rad][0];
		stramosi[rad][1]=stramosi[curent][0];
		curent=stramosi[rad][1];

		if(curent!=0)
		{
			for(j=2;j<maxstr;j++)
			{
				stramosi[rad][j]=stramosi[curent][1];
				curent=stramosi[rad][j];
				if(curent==0)
					break;
			}
		}
	}	
	for(i=0;i<(int) v[rad].size();i++)
		df2(v[rad][i]);
}	

int main()
{
	int stramos,nrbiti;

	ifstream in("stramosi.in");
	ofstream out("stramosi.out");

	memset(stramosi,0,sizeof(stramosi));
	in>>n>>m;
	for(int i=1;i<=n;i++)
	{
		in>>stramos;
		if(stramos)
			v[stramos].push_back(i);
		stramosi[i][0]=stramos;
	}
	//Preprocess the matrix
	df1();
	nrbiti=sizeof(int);//platform independent code
	/*
	for(int i=1;i<=m;i++)
	{
		int p,q;
		cin>>q>>p;
		int contor=nrbiti;
		stramos=q;

		while(contor>=0)
		{
			if(p&(1<<contor))
				stramos=stramosi[stramos][contor];
			contor--;
			if(stramos==0)
				break;
		}
		out<<stramos<<"\n";
	}*/
	in.close();
	out.close();
	return 0;
}