24392023-01-13 10:06:31rennTom és Jerry 3cpp11Futási hiba 26/50168ms8620 KiB
#include    <bits/stdc++.h>
using namespace std;

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

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

    int 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 int bfsm(gr &graf, int kezdo)
{
    queue<int> next;
    next.push(kezdo);
    vector<int> tavok(graf.size(), -1);

    int 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;
}

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

    queue<int> next;
    next.push(j);
    stack<int> jok;

    int 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;
            jok.push(x);
        }
    }

    int m = jok.top(), l;
    jok.pop();
    while(!jok.empty())
    {
        l = jok.top();
        m = tomtavok[m] > tomtavok[l] ? m : l;
        jok.pop();
    }

    return tomtavok[m];
}

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

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

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

        gr graf(n);
        
        vector<int> 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ÖsszpontTesztVerdiktIdőMemória
base26/50
1Futási hiba0/03ms1916 KiB
2Elfogadva0/02ms2080 KiB
3Futási hiba0/52ms2380 KiB
4Elfogadva1/14ms2556 KiB
5Futási hiba0/13ms2856 KiB
6Elfogadva1/13ms2764 KiB
7Futási hiba0/12ms2992 KiB
8Hibás válasz0/13ms3152 KiB
9Futási hiba0/12ms3488 KiB
10Futási hiba0/12ms3832 KiB
11Futási hiba0/23ms3828 KiB
12Elfogadva2/23ms3764 KiB
13Elfogadva1/13ms3768 KiB
14Elfogadva2/2165ms6292 KiB
15Elfogadva2/2153ms5216 KiB
16Elfogadva2/2168ms6516 KiB
17Futási hiba0/2158ms7900 KiB
18Elfogadva2/2167ms6448 KiB
19Elfogadva2/2168ms6888 KiB
20Futási hiba0/2105ms8196 KiB
21Elfogadva2/2152ms5604 KiB
22Elfogadva2/2153ms5496 KiB
23Futási hiba0/3159ms8440 KiB
24Elfogadva2/2168ms7176 KiB
25Elfogadva3/3168ms7032 KiB
26Futási hiba0/2158ms8620 KiB
27Elfogadva2/2152ms6028 KiB
28Hibás válasz0/3153ms6012 KiB