Cod sursa(job #424697)

Utilizator n3msizN3msiz n3msiz Data 25 martie 2010 08:55:46
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
#include<vector>

using namespace std;

vector <int> a[100005];
int n,m,i,x,y,nr,k,aux,nivelmin,j,minim,maxim,pozj;
int eul[100005],fa[100005],niv[100005],lg[100005];

void dfs(int nod,int lev){
	int i;
	
	eul[++k]=nod;
	fa[nod]=k;
	niv[k]=lev;
	for(i=0;i<a[nod].size();i++){
		dfs(a[nod][i],lev+1);
		eul[++k]=nod;
		niv[k]=lev;
	}
	
}

int main(){
	FILE*f=fopen("lca.in","r");
	FILE*g=fopen("lca.out","w");
	
	fscanf(f,"%d %d",&n,&m);
	
	for(i=2;i<=n;i++){
		fscanf(f,"%d",&x);
		a[x].push_back(i);
	}
	
	dfs(1,1);
	
	for(i=1;i<=m;i++){
		fscanf(f,"%d %d",&x,&y);
		
		if(x>y){
			aux=x;
			x=y;
			y=aux;
		}
	
		nivelmin=100010;
		
		for(j=fa[x];j<=fa[y];j++)
			if(niv[j]<nivelmin){
				nivelmin=niv[j];
				pozj=j;
			}
			
		fprintf(g,"%d\n",eul[pozj]);	
	}
	
	fclose(f);
	fclose(g);
	
	return 0;}