Cod sursa(job #1732967)

Utilizator ghost24ghost ghost ghost24 Data 23 iulie 2016 13:10:48
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#include<map>
#define DX 250100
using namespace std;
fstream fin("stramosi.in",ios::in),fout("stramosi.out",ios::out);
int inainte[DX+5],stra[DX+5][20],put[20],mp[DX+5];
vector<int> v[DX];
struct str{int a,b,c;};
queue <str> qu;
int search(int nod,int numar)
{
    while(numar!=0 && nod!=0)
    {
        nod=stra[nod][mp[inainte[numar]]];
        numar-=inainte[numar];
    }
    return nod;
}
void build(int nod,int pre,int nr)
{
    int i,r;
    qu.push({nod,pre,nr});
    while(!qu.empty())
    {
        nod=qu.front().a;
        pre=qu.front().b;
        nr=qu.front().c;
        qu.pop();
        for(i=1;put[i]<=nr;i++)
        {
            //stra[nod][i]=search(pre,put[i]-1);
        }
        for(auto x: v[nod]) qu.push({x,nod,nr+1});
    }

}
int main()
{
    int a,b,n,m,aux,stop,i,j=1;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>stra[i][0];
        v[stra[i][0]].push_back(i);
    }

    for(i=0;i<18;i++)
    {
        aux=(1<<i);
        stop=(1<<(1+i));
        put[i]=aux;
        mp[aux]=i;
        for(j=aux;j<stop && j<DX;j++) inainte[j]=aux;
    }

    for(i=1;i<=n;i++)
    {
        if(stra[i][0]==0)
        {
            build(i,0,0);
        }
    }
    return 0;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        fout<<search(a,b)<<"\n";
    }


}