31812023-02-21 16:21:55NandikaaTom és Jerry 1 (80)cpp11Time limit exceeded 64/80578ms19968 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;
}

SubtaskSumTestVerdictTimeMemory
base64/80
1Accepted0/07ms11248 KiB
2Accepted0/08ms11728 KiB
3Accepted4/46ms11672 KiB
4Accepted4/46ms11704 KiB
5Accepted4/48ms11920 KiB
6Accepted4/47ms12260 KiB
7Accepted4/48ms12132 KiB
8Accepted4/48ms12200 KiB
9Accepted4/48ms12528 KiB
10Accepted4/49ms12660 KiB
11Accepted4/416ms13136 KiB
12Accepted4/419ms13736 KiB
13Accepted4/428ms14640 KiB
14Accepted4/452ms16444 KiB
15Accepted4/468ms16800 KiB
16Accepted4/478ms19180 KiB
17Accepted4/4116ms19968 KiB
18Accepted4/470ms17552 KiB
19Time limit exceeded0/4578ms10500 KiB
20Time limit exceeded0/4573ms10464 KiB
21Time limit exceeded0/4552ms9596 KiB
22Time limit exceeded0/4549ms11040 KiB