24182023-01-13 08:48:27rennTom és Jerry 3cpp11Hibás válasz 2/50163ms8632 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 pii bfsm(gr &graf, int kezdo, stack<int> &path)
{
    queue<int> next;
    next.push(kezdo);
    vector<int> tavok(graf.size(), -1);
    vector<int> prev(graf.size(), -1);

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

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

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

    j = tavok[i]/2;

    while(j--)
    {
        i = prev[i];
    }
 
    j = ((tavok[i] & 1)^1) ? tavok[i]+1 : tavok[i];

    return {i, 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);

    int i, m = -1;
    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;
        }
    }

    return jertavok[i];
}

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

    int n, t, j, k, nn, a, b;
    stack<int> p;
    pii 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] <= k)
        {
            cout << "IGEN\n";
            continue;
        }

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

        kozep = bfsm(graf, nn, p);

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

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/50
1Elfogadva0/03ms1940 KiB
2Hibás válasz0/03ms2316 KiB
3Hibás válasz0/52ms2388 KiB
4Elfogadva1/13ms2512 KiB
5Hibás válasz0/13ms2540 KiB
6Hibás válasz0/13ms2904 KiB
7Hibás válasz0/13ms2984 KiB
8Elfogadva1/13ms3000 KiB
9Hibás válasz0/13ms3008 KiB
10Hibás válasz0/13ms3008 KiB
11Hibás válasz0/23ms3252 KiB
12Hibás válasz0/24ms3468 KiB
13Hibás válasz0/13ms3704 KiB
14Hibás válasz0/2162ms6292 KiB
15Hibás válasz0/2150ms5200 KiB
16Hibás válasz0/2163ms6340 KiB
17Hibás válasz0/2152ms7956 KiB
18Hibás válasz0/2162ms6888 KiB
19Hibás válasz0/2162ms7032 KiB
20Hibás válasz0/2103ms8144 KiB
21Hibás válasz0/2149ms5948 KiB
22Hibás válasz0/2149ms6280 KiB
23Hibás válasz0/3151ms8556 KiB
24Hibás válasz0/2162ms7440 KiB
25Hibás válasz0/3162ms7376 KiB
26Hibás válasz0/2150ms8632 KiB
27Hibás válasz0/2150ms6260 KiB
28Hibás válasz0/3149ms6288 KiB