1375 2022. 08. 28 13:03:04 csandras Tom és Jerry 3 cpp11 Accepted 50/50 207ms 10764 KiB
#include <bits/stdc++.h>

using namespace std;

using Graph = vector<vector<int>>;


void dfs(int p, const Graph& G, vector<int>& dist, vector<bool>& visited)
{
    visited[p] = true;
    for (int q : G[p])
    {
        if (!visited[q])
        {
            dist[q] = dist[p] + 1;
            dfs(q, G, dist, visited);
        }
    }
}

vector<int> distances_from(int start, const Graph& G)
{
    vector<int> dist(G.size(), -1);
    dist[start] = 0;
    vector<bool> visited(G.size(), false);
    dfs(start, G, dist, visited);
    return dist;
}

int diameter(const Graph& G)
{
    vector<int> dist = distances_from(0, G);
    int start = max_element(dist.begin(), dist.end()) - dist.begin();
    vector<int> dist2 = distances_from(start, G);
    return *max_element(dist2.begin(), dist2.end());
}

bool can_caught_in_K_step(const Graph& G, int TS, int JS, int K)
{
    vector<int> dist_T = distances_from(TS, G);
    vector<int> dist_J = distances_from(JS, G);
    for (int i = 0; i < G.size(); ++i)
    {
        if (dist_J[i]+1 < dist_T[i] && dist_T[i] > K)
        {
            return false;
        }
    }
    return true;
}

int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        int N, TS, JS, K;
        cin >> N >> TS >> JS >> K;
        --TS, --JS;
        vector<vector<int>> G(N);
        for (int i = 0; i < N-1; ++i)
        {
            int u, v;
            cin >> u >> v;
            --u, --v;
            G[u].push_back(v);
            G[v].push_back(u);
        }
        if (diameter(G) <= 2*K || can_caught_in_K_step(G, TS, JS, K))
        {
            cout << "IGEN\n";
        }
        else
        {
            cout << "NEM\n";
        }
    }
    return 0;
}
Subtask Sum Test Verdict Time Memory
base 50/50
1 Accepted 0/0 3ms 1812 KiB
2 Accepted 0/0 2ms 2060 KiB
3 Accepted 5/5 2ms 2256 KiB
4 Accepted 1/1 3ms 2512 KiB
5 Accepted 1/1 4ms 2712 KiB
6 Accepted 1/1 4ms 2920 KiB
7 Accepted 1/1 4ms 3120 KiB
8 Accepted 1/1 3ms 3276 KiB
9 Accepted 1/1 4ms 3440 KiB
10 Accepted 1/1 3ms 3376 KiB
11 Accepted 2/2 3ms 3412 KiB
12 Accepted 2/2 4ms 3404 KiB
13 Accepted 1/1 4ms 3388 KiB
14 Accepted 2/2 196ms 6040 KiB
15 Accepted 2/2 165ms 4792 KiB
16 Accepted 2/2 184ms 6300 KiB
17 Accepted 2/2 175ms 7652 KiB
18 Accepted 2/2 207ms 6392 KiB
19 Accepted 2/2 172ms 6608 KiB
20 Accepted 2/2 119ms 10764 KiB
21 Accepted 2/2 168ms 5668 KiB
22 Accepted 2/2 162ms 5552 KiB
23 Accepted 3/3 189ms 8656 KiB
24 Accepted 2/2 196ms 7044 KiB
25 Accepted 3/3 189ms 7016 KiB
26 Accepted 2/2 190ms 8848 KiB
27 Accepted 2/2 180ms 5760 KiB
28 Accepted 3/3 174ms 5888 KiB