3181 2023. 02. 21 16:21:55 Nandikaa Tom és Jerry 1 (80) cpp11 Időlimit túllépés 64/80 578ms 19968 KiB
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<int> jerry[100001];

vector<int> tom[100001];
int cel;
    int lepesTom[100001];  //az adott helyre hány lépés alatt érhet Tom
    int lepesJerry[100001];

void bejarJerry(int x, int d){

    bool van_kitoltetlen = false;
    vector<int> ures_szomszed;
    for(int i=0; i<jerry[x].size(); i++){
        if(lepesJerry[jerry[x][i]]==200000){
            ures_szomszed.push_back(i);
        }
    }
  /*  if(lepesJerry[x]!=200000)
        return;*/
    cout<<x<<" "<<d<<endl;
    //lepesJerry[x] = d;

    for(int i=0; i<jerry[x].size(); i++){
      if(lepesJerry[jerry[x][i]]==200000){
            cout<<jerry[x][i]<<"állítom"<<endl;
            lepesJerry[jerry[x][i]] = d+1;
      }
    }
    for(int i=0; i<ures_szomszed.size(); i++){
        bejarJerry(jerry[x][ures_szomszed[i]], d+1);
    }
}


void bejarTom(int x, int d){ //x a hely poziciója, d a távolság a kezdoponttol
    if(lepesTom[x]!=200000) //akkor már jártam
        return;

    lepesTom[x]=d;

    for(int i=0; i<tom[x].size(); i++){
        bejarTom(tom[x][i], d+1);
    }
}

void bejarTom2(int x, int d){
    deque<int> sor;

    sor.push_back(x);
    lepesTom[x]=d;
    while(!sor.empty()){
        int aktualis = sor[0];
        sor.pop_front();
        d++;
        for(int i = 0;i < tom[aktualis].size();i++){
            if (lepesTom[tom[aktualis][i]]==200000){
                lepesTom[tom[aktualis][i]]=lepesTom[aktualis]+1;
                sor.push_back(tom[aktualis][i]);
            }
        }

    }

}

int szint[100001];
void bejarJerry2(int x, int d, int vege){
    deque<int> sor;

    sor.push_back(x);
    lepesJerry[x]=0;
    while(!sor.empty()){
        int aktualis = sor[0];
        if(lepesTom[aktualis]<=lepesJerry[aktualis]){
            sor.pop_front();
            continue;
        }

        if (aktualis==vege){
            cel= true;
            break;
        }
        sor.pop_front();

        for(int i = 0;i < jerry[aktualis].size();i++){


            if (lepesJerry[jerry[aktualis][i]]==200000){
                lepesJerry[jerry[aktualis][i]]=lepesJerry[aktualis]+1;
                sor.push_back(jerry[aktualis][i]);

            }
        }
    }

}



bool benne_van(vector<int>  x, int szam){
    for(int i=0; i<x.size();i++){
        if(x[i]==szam)
            return true;
    }
    return false;
}

int main()
{
    int hely;
    int utak;
    int tom_start;
    int m;
    int vege;

    cin>>hely;
    cin>>utak;
    cin>>tom_start;
    cin>>m;
    cin>>vege;

    //vector<int> jerry[hely+1];

    //vector<int> tom[hely+1];

    int honnan, hova, szelesseg;

    for(int i=0; i<utak; i++){
            cin>>honnan;
            cin>>hova;
            cin>>szelesseg;

            //if(benne_van(jerry[honnan], hova)==false)
                    jerry[honnan].push_back(hova);

            //if(benne_van(jerry[hova], honnan)==false)
                    jerry[hova].push_back(honnan);

            if(szelesseg==2){
                //if(benne_van(tom[honnan], hova)==false)
                    tom[honnan].push_back(hova);

                //if(benne_van(tom[hova], honnan)==false)
                    tom[hova].push_back(honnan);
            }

    }
    for(int i=1; i<=hely; i++){
        lepesTom[i]=200000;
    }
    bejarTom2(tom_start, 0);

    /*for(int i=1; i<=hely; i++){
        cout<<i<<". csomopontba "<<lepesTom[i]<<" lepes alatt jut el Jerry"<<endl;
    }*/
    int jindul;
    for(int j=0; j<m;j++){

        cin >> jindul;

        for (int i=1; i<=hely;i++){
            lepesJerry[i]=200000;
        }
        cel = false;
        bejarJerry2(jindul, 0, vege);
        if(cel==true)
            cout <<"IGEN"<< endl;
        else
            cout << "NEM" << endl;
    }
   /* for(int i=1; i<=hely; i++){
        cout<<i<<". csomopontba "<<lepesJerry[i]<<" lepes alatt jut el Jerry"<<endl;
    }*/
    /*for(int i=1; i<=hely; i++){
        lepesJerry[i]=200000;
    }
    lepesJerry[8]=0;
    bejarJerry(8, 0);
     cout<<"*";
    for(int i=1; i<=hely; i++){
        cout<<i<<". pontba "<<lepesJerry[i]<<" allatt megy Jerry."<<endl;
    }*/

    return 0;
}

Részfeladat Összpont Teszt Verdikt Idő Memória
base 64/80
1 Elfogadva 0/0 7ms 11248 KiB
2 Elfogadva 0/0 8ms 11728 KiB
3 Elfogadva 4/4 6ms 11672 KiB
4 Elfogadva 4/4 6ms 11704 KiB
5 Elfogadva 4/4 8ms 11920 KiB
6 Elfogadva 4/4 7ms 12260 KiB
7 Elfogadva 4/4 8ms 12132 KiB
8 Elfogadva 4/4 8ms 12200 KiB
9 Elfogadva 4/4 8ms 12528 KiB
10 Elfogadva 4/4 9ms 12660 KiB
11 Elfogadva 4/4 16ms 13136 KiB
12 Elfogadva 4/4 19ms 13736 KiB
13 Elfogadva 4/4 28ms 14640 KiB
14 Elfogadva 4/4 52ms 16444 KiB
15 Elfogadva 4/4 68ms 16800 KiB
16 Elfogadva 4/4 78ms 19180 KiB
17 Elfogadva 4/4 116ms 19968 KiB
18 Elfogadva 4/4 70ms 17552 KiB
19 Időlimit túllépés 0/4 578ms 10500 KiB
20 Időlimit túllépés 0/4 573ms 10464 KiB
21 Időlimit túllépés 0/4 552ms 9596 KiB
22 Időlimit túllépés 0/4 549ms 11040 KiB