139862025-01-09 13:59:18RRoliA lehető legkevesebb metróval utazás (40 pont)cpp17Futási hiba 0/403ms576 KiB
#include <bits/stdc++.h>
using namespace std;

int n, m, t, p, e;
vector<int> tL;
vector<vector<int>> szom, tszom;

int main() {
    cin >> n >> m >> t >> p >> e;
    tL.resize(n+1, -1);
    szom.resize(n+1, vector<int>(0));
    tszom.resize(n+1, vector<int>(0));

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

    queue<int> sor;
    sor.push(t);
    tL[t] = 0;
    int ln = 0;
    while(!sor.empty()) {
        for(auto i : tszom[sor.front()]) {
            if(tL[i] == -1) {
                tL[i] = tL[sor.front()]+1;
                sor.push(i);
                ln = max(ln, tL[i]);
            }
        }
        sor.pop();
    }

    vector<bool> win(n+1, false), nextwin(n+1, false);
    vector<int> L(n+1, -1);
    win[e] = true;
    L[e] = true;
    sor.push(e);
    while(!sor.empty()) {
        for(auto i : szom[sor.front()]) {
            if(L[i] == -1 && tL[i] == -1) {
                win[i] = true;
                sor.push(i);
            } else if(L[i] == -1 && tL[i] != -1) {
                nextwin[i] = true;
            }
            L[i] = 0;
        }
        sor.pop();
    }

    for(int i = 1; i <= n; i++) {
        L[i] = -1;
        if(tL[i] == ln && tL[i] > 0 && nextwin[i]) {
            sor.push(i);
            L[i] = ln;
        } else {
           nextwin[i] = false; 
        }
    }

    while(!sor.empty()) {
        win[sor.front()] = true;
        if(L[sor.front()] > 1)
            for(auto i : szom[sor.front()]) {
                if(!nextwin[i]) {
                    if(L[i] == -1) L[i] = L[sor.front()]-1;
                    else L[i] = min(L[i], L[sor.front()]-1);
                    nextwin[i] = true;
                    sor.push(i);
                }
            }
        sor.pop();
    }

    for(int i = 0; i < p; i++) {
        int k;
        cin >> k;
        if(win[k]) cout << "IGEN\n";
        else cout << "NEM\n";
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/40
1Futási hiba0/01ms316 KiB
2Futási hiba0/01ms316 KiB
3Futási hiba0/21ms500 KiB
4Futási hiba0/21ms316 KiB
5Futási hiba0/23ms508 KiB
6Futási hiba0/21ms576 KiB
7Futási hiba0/23ms508 KiB
8Futási hiba0/21ms316 KiB
9Futási hiba0/21ms316 KiB
10Futási hiba0/21ms316 KiB
11Futási hiba0/21ms316 KiB
12Futási hiba0/21ms316 KiB
13Futási hiba0/21ms328 KiB
14Futási hiba0/21ms404 KiB
15Futási hiba0/21ms316 KiB
16Futási hiba0/21ms316 KiB
17Futási hiba0/21ms512 KiB
18Futási hiba0/21ms316 KiB
19Futási hiba0/21ms316 KiB
20Futási hiba0/21ms316 KiB
21Futási hiba0/21ms316 KiB
22Futási hiba0/21ms316 KiB