86122024-01-23 16:25:41Wrinkle1564Kerékpártúra (50 pont)cpp17Hibás válasz 0/50338ms25732 KiB
#include <algorithm>
#include <iostream>
#include <set>
#include <unordered_map>

using std::cin;
using std::cout;
using std::set;
using std::unordered_map;

// 2 `set`s, one has any of the other one
auto contains(const set<int> &has, const set<int> &any) -> bool {
    for (const auto &item : has) {
        if (any.find(item) != any.end()) {
            return true;
        }
    }
    return false;
}

auto main() -> int {
    // num of all points
    int n = 0;
    cin >> n;
    // num of routes
    int m = 0;
    cin >> m;
    // idx+1 of starting point
    int k = 0;
    cin >> k;

    // the hashmap containing information about the map
    unordered_map<int, set<int>> umap;

    int from = 0;
    int to = 0;
    for (int i = 0; i < m; i++) {
        cin >> from >> to;
        // inserting to `from`-s set
        umap[from].insert(to);
    }

    for (const auto &item : umap) {
        cout << item.first << "->\n";
        for (const auto &it : item.second) {
            cout << "   " << it << "\n";
        }
        cout << "\n";
    }

    // the `set` containing points, from where you can access `k`
    set<int> can_access_k;
    // adding items, that can go to `k`
    for (const auto &item : umap) {
        // if `item`s destinations contains `k` or `v` contains any of `item`s
        // destinations
        if (item.second.find(k) != item.second.end() || contains(can_access_k, item.second)) {
            can_access_k.insert(item.first);
        }
    }
    // deleting `k`
    can_access_k.erase(k);
    cout << "from these points you can access " << k << ": [";
    for (const auto &item : can_access_k) {
        cout << item << ", ";
    }
    cout << "\b\b]\n";

    // the `set` containing possible end points
    set<int> ends;

    // iterating through `v`
    for (const auto &item : can_access_k) {
        // inserting `item`
        ends.insert(item);
        // inserting every item of `item`s destinations
        for (const auto &it : umap[item]) {
            ends.insert(it);
        }
    }
    // inserting everyone of `k`-s direct neighbours
    for (const auto &item : umap[k]) {
        ends.insert(item);
    }
    // and finally deleting `k` itself
    ends.erase(k);

    cout << ends.size() << "\n";
    for (const auto &end : ends) {
        cout << end << " ";
    }

    cout << std::endl;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Hibás válasz0/03ms1808 KiB
2Hibás válasz0/034ms6108 KiB
3Hibás válasz0/23ms2120 KiB
4Hibás válasz0/23ms2324 KiB
5Hibás válasz0/23ms2532 KiB
6Hibás válasz0/23ms2760 KiB
7Hibás válasz0/23ms2848 KiB
8Hibás válasz0/26ms3384 KiB
9Hibás válasz0/26ms3372 KiB
10Hibás válasz0/27ms3688 KiB
11Hibás válasz0/28ms4148 KiB
12Hibás válasz0/218ms5524 KiB
13Hibás válasz0/218ms5424 KiB
14Hibás válasz0/237ms7496 KiB
15Hibás válasz0/348ms9724 KiB
16Hibás válasz0/450ms10160 KiB
17Hibás válasz0/475ms12440 KiB
18Hibás válasz0/364ms11792 KiB
19Hibás válasz0/359ms11104 KiB
20Hibás válasz0/3221ms23036 KiB
21Hibás válasz0/3338ms25468 KiB
22Hibás válasz0/3232ms25732 KiB