184962025-10-24 13:03:13KristófTom és Jerry 1 (80)cpp17Time limit exceeded 64/80600ms6044 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> bfsTom(const vector<vector<int>>& g, int start) {
    vector<int> dist(g.size(), -1);
    queue<int> q;
    dist[start] = 0;
    q.push(start);
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for (int v : g[u]) {
            if (dist[v] == -1) {
                dist[v] = dist[u] + 1;
                q.push(v);
            }
        }
    }
    return dist;
}

bool canEscape(const vector<vector<int>>& g,
               const vector<int>& tomDist,
               int start, int exitNode,
               vector<int>& vis, vector<int>& jdist)
{
    int n = g.size();
    queue<int> q;
    int stamp = start;              // unique “visited mark”
    jdist[start] = 0;
    vis[start] = stamp;
    q.push(start);

    while (!q.empty()) {
        int u = q.front(); q.pop();
        if (u == exitNode) return true;
        for (int v : g[u]) {
            if (vis[v] == stamp) continue;
            int jd = jdist[u] + 1;
            if (tomDist[v] != -1 && jd >= tomDist[v]) continue;
            vis[v] = stamp;
            jdist[v] = jd;
            q.push(v);
        }
    }
    return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m, t, p, e;
    cin >> n >> m >> t >> p >> e;

    vector<vector<int>> graphJ(n + 1);
    vector<vector<int>> graphT(n + 1);

    for (int i = 0; i < m; i++) {
        int a, b, s;
        cin >> a >> b >> s;
        graphJ[a].push_back(b);
        graphJ[b].push_back(a);
        if (s == 2) {
            graphT[a].push_back(b);
            graphT[b].push_back(a);
        }
    }

    vector<int> tomDist = bfsTom(graphT, t);

    // reuse memory
    vector<int> vis(n + 1, 0);
    vector<int> jdist(n + 1, 0);

    while (p--) {
        int start;
        cin >> start;
        bool res = canEscape(graphJ, tomDist, start, e, vis, jdist);
        cout << (res ? "IGEN\n" : "NEM\n");
    }

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base64/80
1Accepted0/01ms316 KiB
2Accepted0/02ms316 KiB
3Accepted4/41ms316 KiB
4Accepted4/41ms504 KiB
5Accepted4/41ms316 KiB
6Accepted4/41ms316 KiB
7Accepted4/41ms316 KiB
8Accepted4/42ms316 KiB
9Accepted4/42ms316 KiB
10Accepted4/42ms648 KiB
11Accepted4/46ms820 KiB
12Accepted4/48ms1488 KiB
13Accepted4/414ms1772 KiB
14Accepted4/427ms3096 KiB
15Accepted4/435ms3156 KiB
16Accepted4/450ms6044 KiB
17Accepted4/474ms5216 KiB
18Accepted4/439ms3984 KiB
19Time limit exceeded0/4600ms5172 KiB
20Time limit exceeded0/4600ms4916 KiB
21Time limit exceeded0/4600ms3600 KiB
22Time limit exceeded0/4592ms5176 KiB