Cod sursa(job #1425979)

Utilizator CalinCojoFMI Cojocaru Calin George CalinCojo Data 28 aprilie 2015 18:04:31
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#include <stack>
#include <bitset>
#define MAX 250001
using namespace std;

vector <unsigned int> cereri[ MAX ],   vecini [ MAX ] , stiva  ,raspunsuri [ MAX ];
bitset <1>  viz[ 250002 ];

void mod_dfs ( int nd){

    vector < unsigned int > stiva_dfs ;
    unsigned int curr_nd ;
    int   i;
    stiva_dfs.push_back ( nd );
    viz [ nd ] = 1;

    while ( stiva_dfs.size() ){
        curr_nd = stiva_dfs.back() ;

        //daca am vreo cerere pt nd current
        if ( cereri [ curr_nd ].size () ){

            for ( i = cereri [ curr_nd ].size () - 1 ; i >= 0 ; i-- ){

                if ( cereri [ curr_nd ] [ i ] >= stiva_dfs.size ()  )
                    raspunsuri [ curr_nd ].push_back( 0 );
                else
                    raspunsuri [ curr_nd ] . push_back ( stiva_dfs [ stiva_dfs.size () -  cereri [ curr_nd] [ i ] - 1   ]    ) ;

            }

        }

        if ( vecini [ curr_nd ].size () ) {

            stiva_dfs.push_back ( vecini [ curr_nd ].back() );
            vecini [ curr_nd ].pop_back() ;

        }
        else{

            stiva_dfs.pop_back() ;

        }

    }

}

int main()
{
    int n,m,p,q,i = 1;
    ifstream f("stramosi.in",ios::in);
    ofstream g("stramosi.out",ios::out);
    f>>n>>m;

    // lista de adiacenta
    for(i = 1;i <= n ; i++){
        f>>p;
        vecini[ p ].push_back( i );
    }

    // citesc cererile
    while( m ){
        f>>q>>p;
        cereri[ q ].push_back( p );  // pt fiecare membru p am o lista cu cereri de stramosi
        m--;
    }

    f.close ();

    mod_dfs ( 0 );

  ifstream h("stramosi.in",ios::in);
    h>>n>>m;

    for(i = 1;i <= n ; i++)
        h>>p;

    while ( m-- ){
        h>>q>>p;
        g<<raspunsuri [ q ]. back()<<"\n";
        cereri [ q ].pop_back() ;
    }





    return 0;
}