254282026-02-20 02:05:39999Tom és Jerry 3cpp17Accepted 50/50187ms5028 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<int> tav(vector<vector<int>> &v, int s, int n){
    vector<int> d(n,-1);
    queue<int> q;
    d[s]=0;
    q.push(s);
    while(!q.empty()){
        int a=q.front();
        q.pop();
        for(int u : v[a]){
            if(d[u]==-1){
                d[u]=d[a]+1;
                q.push(u);
            }
        }
    }
    return d;
}


signed main() {
    int t;cin>>t;
    while(t--){
        int n,ts,js,k;cin>>n>>ts>>js>>k;
        vector<vector<int>> v(n);
        ts--,js--;
        for(int i = 0;i<n-1;i++){
            int a,b;cin>>a>>b;
            v[--a].push_back(--b);
            v[b].push_back(a);
        }
        vector<int> d1=tav(v,js,n),d2=tav(v,ts,n);
        int ans=0;
        int node=0;
        for(int i = 0;i<n;i++){
            if(d1[i]>d1[node])node=i;
            if(d1[i]<d2[i]-1){
                ans=max(ans,d2[i]);
            }
        }
        vector<int> D=tav(v,node,n);
        for(int i = 0;i<n;i++){
            if(D[i]>D[node])node=i;
        }
        if((D[node]+1)/2<=k)ans=0;
        cout<<(ans<=k?"IGEN":"NEM")<<endl;
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted5/51ms316 KiB
4Accepted1/12ms316 KiB
5Accepted1/13ms764 KiB
6Accepted1/13ms316 KiB
7Accepted1/13ms316 KiB
8Accepted1/13ms316 KiB
9Accepted1/12ms316 KiB
10Accepted1/12ms316 KiB
11Accepted2/22ms316 KiB
12Accepted2/22ms316 KiB
13Accepted1/13ms316 KiB
14Accepted2/2184ms3704 KiB
15Accepted2/2165ms3128 KiB
16Accepted2/2187ms4352 KiB
17Accepted2/2172ms4908 KiB
18Accepted2/2182ms4248 KiB
19Accepted2/2181ms4092 KiB
20Accepted2/2116ms4160 KiB
21Accepted2/2164ms3100 KiB
22Accepted2/2163ms1264 KiB
23Accepted3/3172ms5020 KiB
24Accepted2/2182ms4160 KiB
25Accepted3/3181ms4028 KiB
26Accepted2/2178ms5028 KiB
27Accepted2/2165ms3212 KiB
28Accepted3/3163ms1340 KiB