2190 2022. 12. 30 15:11:14 1478 Tom és Jerry 1 (80) cpp11 Elfogadva 80/80 123ms 16628 KiB
#include <bits/stdc++.h>

using namespace std;

const int MINI = -300000;

int main()
{
    //ifstream cin("be.txt");

    int n, m, t, p, e;
    cin >> n >> m >> t >> p >> e;
    vector<vector<int>> jN(n + 1, vector<int>(1)), tN(n + 1, vector<int>(1));
    for (int i = 1; i <= m; i++)
    {
        int k, v, s;
        cin >> k >> v >> s;
        if (s == 2)
        {
            tN[k].push_back(v);
            tN[v].push_back(k);
        }
        jN[k].push_back(v);
        jN[v].push_back(k);
    }

    /*
    for (int i = 1; i <= n; i++)
    {
        cout << i << ": " << '\n';
        for (int j = 1; j < tN[i].size(); j++)
        {
            cout << tN[i][j] << " ";
        }
        cout << '\n';
    }
    */

    vector<int> tD(n + 1, MINI);
    queue<int> q;
    q.push(t);
    tD[t] = 0;
    while (!q.empty())
    {
        int a = q.front();
        q.pop();
        for (int i = 1; i < tN[a].size(); i++)
        {
            if (tD[tN[a][i]] == MINI)
            {
                tD[tN[a][i]] = tD[a] + 1;
                q.push(tN[a][i]);
            }
        }
    }

    /*
    for (int i = 1; i <= n; i++)
    {
        cout << tD[i] << " ";
    }
    */

    vector<int> jD(n + 1, MINI);
    priority_queue<pair<int, int>> pq;
    if (tD[e] == MINI)
    {
        jD[e] = INT_MAX;
    }
    pq.push({jD[e], e});
    while (!pq.empty())
    {
        pair<int, int> a = pq.top();
        pq.pop();
        for (int i = 1; i < jN[a.second].size(); i++)
        {
            if (jD[jN[a.second][i]] == MINI)
            {
                jD[jN[a.second][i]] = jD[a.second] - 1;
                if (tD[jN[a.second][i]] != MINI)
                {
                    jD[jN[a.second][i]] = min(jD[jN[a.second][i]], tD[jN[a.second][i]] - 1);
                }
                pq.push({jD[jN[a.second][i]], jN[a.second][i]});
            }
        }
    }

    while (p--)
    {
        int a;
        cin >> a;

        if (jD[a] >= 0)
        {
            cout << "IGEN" << '\n';
        }
        else
        {
            cout << "NEM" << '\n';
        }
    }

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 80/80
1 Elfogadva 0/0 3ms 1808 KiB
2 Elfogadva 0/0 4ms 2488 KiB
3 Elfogadva 4/4 2ms 2376 KiB
4 Elfogadva 4/4 2ms 2284 KiB
5 Elfogadva 4/4 2ms 2672 KiB
6 Elfogadva 4/4 2ms 2756 KiB
7 Elfogadva 4/4 3ms 2696 KiB
8 Elfogadva 4/4 4ms 2948 KiB
9 Elfogadva 4/4 4ms 3160 KiB
10 Elfogadva 4/4 4ms 3468 KiB
11 Elfogadva 4/4 10ms 4172 KiB
12 Elfogadva 4/4 16ms 5692 KiB
13 Elfogadva 4/4 26ms 6532 KiB
14 Elfogadva 4/4 52ms 10172 KiB
15 Elfogadva 4/4 71ms 10800 KiB
16 Elfogadva 4/4 87ms 16628 KiB
17 Elfogadva 4/4 112ms 14704 KiB
18 Elfogadva 4/4 74ms 12632 KiB
19 Elfogadva 4/4 90ms 14380 KiB
20 Elfogadva 4/4 86ms 14416 KiB
21 Elfogadva 4/4 78ms 12280 KiB
22 Elfogadva 4/4 123ms 15356 KiB