Pagini recente » Cod sursa (job #763517) | Istoria paginii utilizator/testamtoataziuaterog | Cod sursa (job #879507) | Cod sursa (job #968521) | Cod sursa (job #730828)
Cod sursa(job #730828)
#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;
}