Cod sursa(job #730828)

Utilizator mariulaurMariu Laurentiu mariulaur Data 6 aprilie 2012 22:38:48
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<vector>
#define dmax 250002
#define dmax2 300002
using namespace std;

vector<long> a[dmax];
vector<long> b[dmax2],b2[dmax2];

int vizitat[dmax];
long sol[dmax2],s[dmax];


void dfs(long nod, long nivel)
{
 long i,elem;
	
 vizitat[nod]=1;
 s[nivel]=nod; 
 for (i=0; i<b[nod].size(); i++) 
	 {
	  elem=b[nod][i];
	  if (nivel-elem > 0)
		  sol[b2[nod][i]]=s[nivel-elem]; else
		  sol[b2[nod][i]]=0;
	 }
 
 for (i=0; i<a[nod].size(); i++) /*parcurg vecinii lui nod*/
	 if (vizitat[a[nod][i]]==0)
		 dfs(a[nod][i],nivel+1);
}

int main()
{
 long n,m,x,y,i;
	
 ifstream fin("stramosi.in");
 fin>>n>>m;
 for (i=1; i<=n; i++)
	 {
	  fin>>x;
	  a[x].push_back(i);
	 }
 for (i=1; i<=m; i++)
	 {
	  fin>>x>>y;
	  b[x].push_back(y); 	  b2[x].push_back(i); 
 }
	
 for (i=1; i<=n; i++)
	 if (vizitat[i]==0)
		 dfs(i,1);

 ofstream fout("stramosi.out");
 for (i=1; i<=m; i++)
	 fout<<sol[i]<<'\n';
 
 fin.close();
 fout.close();
 
 return 0;
}