2450 2023. 01. 13 10:26:32 renn Tom és Jerry 3 cpp11 Elfogadva 50/50 170ms 8944 KiB
#include    <bits/stdc++.h>
using namespace std;

typedef vector<vector<long>> gr;
typedef pair<long, long> pii;

inline long bfs(gr &graf, long kezdo, vector<long> &tavok)
{
    queue<long> next;
    next.push(kezdo);

    long i;
    while(!next.empty())
    {
        i = next.front();
        next.pop();

        for(auto &x : graf[i])
        {
            if(tavok[x] > -1) continue;

            next.push(x);
            tavok[x] = tavok[i]+1;
        }
    }

    return i;
}

inline long bfsm(gr &graf, long kezdo)
{
    queue<long> next;
    next.push(kezdo);
    vector<long> tavok(graf.size(), -1);

    long i, j;
    while(!next.empty())
    {
        i = next.front();
        next.pop();

        for(auto &x : graf[i])
        {
            if(tavok[x] > -1) continue;

            next.push(x);
            tavok[x] = tavok[i]+1;
        }
    }

    j = tavok[i]/2;
 
    //j = (j & 1)^1 ? j+1 : j;

    return j;
}

long jerry(gr &graf, long j, long &t, vector<long> &tomtavok)
{
    vector<long> jertavok(graf.size(), -1);
    jertavok[j] = 0;

    queue<long> next;
    next.push(j);
    long m = j;

    long i;
    while(!next.empty())
    {
        i = next.front();
        next.pop();

        for(auto &x : graf[i])
        {
            if(jertavok[x] > -1 || tomtavok[x] <= jertavok[i]+2) continue;

            next.push(x);
            jertavok[x] = jertavok[i]+1;
            m = tomtavok[m] > tomtavok[x] ? m : x;
        }
    }
    return m > -1 ? tomtavok[m] : tomtavok[i];
}

int main()
{
    long T;
    cin >> T;

    long n, t, j, k, nn, a, b;
    long kozep;

    while(T--)
    {
        cin >> n >> t >> j >> k;
        j--;
        t--;
        nn = n-1;

        gr graf(n);
        
        vector<long> tomtavok(n, -1);
        tomtavok[t] = 0;

        while(nn--)
        {
            cin >> a >> b;

            a--; b--;
            graf[a].push_back(b);
            graf[b].push_back(a);

        }

        nn = t;
        
        nn = bfs(graf, nn, tomtavok);

        if(tomtavok[j] == 1)
        {
            cout << "IGEN\n";
            continue;
        }

        if(jerry(graf, j, t, tomtavok) <= k)
        {
            cout << "IGEN\n";
            continue;
        }

        kozep = bfsm(graf, nn);

        cout << (kozep < k ? "IGEN" : "NEM") << "\n";
    }

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1816 KiB
2 Elfogadva 0/0 2ms 2056 KiB
3 Elfogadva 5/5 2ms 2108 KiB
4 Elfogadva 1/1 3ms 2316 KiB
5 Elfogadva 1/1 3ms 2552 KiB
6 Elfogadva 1/1 3ms 2752 KiB
7 Elfogadva 1/1 3ms 2992 KiB
8 Elfogadva 1/1 3ms 3072 KiB
9 Elfogadva 1/1 3ms 3044 KiB
10 Elfogadva 1/1 3ms 3272 KiB
11 Elfogadva 2/2 3ms 3376 KiB
12 Elfogadva 2/2 3ms 3444 KiB
13 Elfogadva 1/1 3ms 3688 KiB
14 Elfogadva 2/2 165ms 6812 KiB
15 Elfogadva 2/2 153ms 5504 KiB
16 Elfogadva 2/2 170ms 7376 KiB
17 Elfogadva 2/2 157ms 8700 KiB
18 Elfogadva 2/2 166ms 7260 KiB
19 Elfogadva 2/2 167ms 7344 KiB
20 Elfogadva 2/2 105ms 8420 KiB
21 Elfogadva 2/2 152ms 5540 KiB
22 Elfogadva 2/2 151ms 5640 KiB
23 Elfogadva 3/3 158ms 8728 KiB
24 Elfogadva 2/2 165ms 7272 KiB
25 Elfogadva 3/3 165ms 7624 KiB
26 Elfogadva 2/2 158ms 8944 KiB
27 Elfogadva 2/2 152ms 5948 KiB
28 Elfogadva 3/3 152ms 5992 KiB