Cod sursa(job #393363)

Utilizator ConsstantinTabacu Raul Consstantin Data 9 februarie 2010 12:17:58
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<vector>
using namespace std;

vector<int> x[ 300007 ],poz[ 300007 ],v[ 250007 ];

int i,j,k,l,m,n,sol[ 300007 ],a,b,s[ 250007 ];

void dfs(int nod,int k){
s[k] = nod;
if(!x[nod].empty())
	{int N,j;
	N = x[nod].size();
	for( j = 0 ; j < N ; j++)
		if(k > x[nod][j])
			sol[poz[nod][j]] = s[k - x[nod][j]];
	}
	
int i,n;
n = v[nod].size();
for( i = 0; i < n ; i++)
	dfs(v[nod][i],k+1);

}

int main(){
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);

	scanf("%d %d",&n,&m);
	for(i = 1 ; i <= n ; i++)
		{scanf("%d",&a);
		v[a].push_back(i);
		}
for(i = 1 ; i <= m ; i++ )
	{scanf("%d %d",&b,&a);
	x[b].push_back(a);
	poz[b].push_back(i);
	}
	
dfs(0,0);

for(i = 1 ; i <= m ; i++)
	printf("%d\n",sol[i]);

return 0;}