130202025-01-04 17:57:29arnoldbeilandTom és Jerry 1 (80)cpp17Accepted 80/80115ms4408 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;

void bfs_tom(
    int t, const vector<vector<pair<int,bool>>> &adj,
    vector<int> &limit)
{
    queue<int> q;
    q.push(t);
    limit[t] = 0;

    while (!q.empty()) {
        int v = q.front();
        q.pop();

        for (auto p : adj[v]) {
            if (p.second && limit[p.first] == INT_MAX) {
                limit[p.first] = limit[v] + 1;
                q.push(p.first);
            }
        }
    }
}

void smecher(
    int e, const vector<vector<pair<int,bool>>> &adj,
    const vector<int> &limit,
    vector<int> &rem)
{
    priority_queue<
        pair<int, int>, // (rem, v)
        vector<pair<int,int>>,
        less<pair<int,int>>> pq;

    rem[e] = limit[e]-1;
    pq.push({rem[e], e});

    while (!pq.empty()) {
        int remv = pq.top().first;
        int v = pq.top().second;
        pq.pop();

        if (rem[v] == remv) {
            for (auto p : adj[v]) {
                int sz = p.first;
                if (rem[sz] == -1 && limit[sz] > 0) {
                    rem[sz] = min(remv-1, limit[sz]-1);
                    pq.push({rem[sz],sz});
                }
            }
        }
    }
}

int main()
{
    int n, m, t, p, e;
    cin >> n >> m >> t >> p >> e;

    vector<vector<pair<int,bool>>> adj(n+1);
        // .first == ki a szomszéd
        // .second == true, ha tom is mehet ott

    for (int i = 0; i < m; i++) {
        int a, b, tip;
        cin >> a >> b >> tip;
        bool mehet = (tip == 2);

        adj[a].push_back({b, mehet});
        adj[b].push_back({a, mehet});
    }

    vector<int> limit(n+1, INT_MAX);

    bfs_tom(t, adj, limit);

    vector<int> rem(n+1, -1);

    smecher(e, adj, limit, rem);

    for (int i = 0; i < p; i++) {
        int start;
        cin >> start;

        if (rem[start] >= 0)
            cout << "IGEN\n";
        else
            cout << "NEM\n";
    }

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base80/80
1Accepted0/01ms320 KiB
2Accepted0/03ms320 KiB
3Accepted4/41ms508 KiB
4Accepted4/41ms320 KiB
5Accepted4/41ms320 KiB
6Accepted4/41ms320 KiB
7Accepted4/42ms320 KiB
8Accepted4/42ms320 KiB
9Accepted4/43ms500 KiB
10Accepted4/43ms320 KiB
11Accepted4/49ms588 KiB
12Accepted4/414ms1080 KiB
13Accepted4/421ms1372 KiB
14Accepted4/446ms2416 KiB
15Accepted4/464ms2868 KiB
16Accepted4/472ms3896 KiB
17Accepted4/4111ms4408 KiB
18Accepted4/464ms3128 KiB
19Accepted4/479ms3328 KiB
20Accepted4/479ms3392 KiB
21Accepted4/475ms2872 KiB
22Accepted4/4115ms4388 KiB