31802023-02-21 16:13:53NandikaaTom és Jerry 1 (80)cpp11Időlimit túllépés 64/80583ms20348 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ÖsszpontTesztVerdiktIdőMemória
base64/80
1Elfogadva0/06ms11252 KiB
2Elfogadva0/08ms11728 KiB
3Elfogadva4/46ms11724 KiB
4Elfogadva4/47ms11940 KiB
5Elfogadva4/47ms11828 KiB
6Elfogadva4/47ms12092 KiB
7Elfogadva4/47ms12324 KiB
8Elfogadva4/48ms12580 KiB
9Elfogadva4/48ms12712 KiB
10Elfogadva4/48ms12728 KiB
11Elfogadva4/417ms13184 KiB
12Elfogadva4/421ms13680 KiB
13Elfogadva4/430ms14504 KiB
14Elfogadva4/456ms16180 KiB
15Elfogadva4/476ms16672 KiB
16Elfogadva4/4119ms19140 KiB
17Elfogadva4/4128ms20348 KiB
18Elfogadva4/475ms17860 KiB
19Időlimit túllépés0/4574ms11164 KiB
20Időlimit túllépés0/4564ms11048 KiB
21Időlimit túllépés0/4583ms10364 KiB
22Időlimit túllépés0/4568ms11592 KiB