Cod sursa(job #1246266)

Utilizator TheFFOFratila Florin Ovidiu TheFFO Data 20 octombrie 2014 20:56:53
Problema Stramosi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>

#define N 250005

using namespace std;

vector<int> g[N];
vector<pair<int,int> > pq;
int n,m;

void read()
{
    int a,b;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&a);
        if(a)
            g[i].push_back(a);
    }
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d",&a,&b);
        pq.push_back(make_pair(a,b));
    }
}

void bfs(int nod,int dist)
{
    int k,viz[N];
    memset(viz,0,sizeof(viz));
    queue<int> q;
    q.push(nod);
    viz[nod]=1;
    bool ok=1;
    while(!q.empty()&&ok)
    {
        k=q.front();
        q.pop();
        for(vector<int>::iterator it=g[k].begin();it!=g[k].end();++it)
        if(!viz[*it])
        {
            q.push(*it);
            if((viz[*it]=viz[k]+1)-1==dist)
            {
                printf("%d\n",*it);
                ok=0;
            }
        }
    }
    if(ok)
        printf("0\n");
}

void solve()
{
    for(vector<pair<int,int> >::iterator it=pq.begin();it!=pq.end();++it)
        bfs(it->first,it->second);
}

int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    read();
    solve();
    return 0;
}