提出 #61137117


ソースコード 拡げる

#include <bits/stdc++.h>
#include <atcoder/modint>

namespace {
    using ModInt [[maybe_unused]] = atcoder::modint998244353;
    using Num [[maybe_unused]] = long long int;
    using Vec [[maybe_unused]] = std::vector<Num>;
    using Set [[maybe_unused]] = std::set<Num>;
    using Mset [[maybe_unused]] = std::multiset<Num>;
    using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;

    template<typename T>
    using Q [[maybe_unused]] = std::queue<T>;

    template<typename T>
    using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;

    const std::vector<std::pair<Num, Num>> dyxs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    std::map<char, std::pair<Num, Num>> directions {{'D', {1, 0}}, {'U', {-1, 0}}, {'R', {0, 1}}, {'L', {0, -1}}};

    template<typename T>
    void print_oneline(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << (((i+1) == size) ? '\n' : ' ');
        }
    }

    template<typename T>
    void print_each(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << '\n';
        }
    }
}

Edges edges;
Num from {-1};
Num to {-1};

bool visit_dfs(Vec& seq, Set& seen, Set& req, Num current) {
    Vec vs;

    for(const auto& next : edges[current]) {
        if (seen.contains(next)) {
            continue;
        }

        vs.push_back(next);
    }

    if (vs.empty()) {
        return req.empty();
    }

    for(const auto& next : vs) {
        seq.push_back(next);
        seen.insert(next);
        bool found = req.contains(next);
        if (found) {
            req.erase(next);
        }

        if (visit_dfs(seq, seen, req, next)) {
            return true;
        }

        if (found) {
            req.insert(next);
        }

        seen.erase(next);
        seq.pop_back();
    }

    return false;
}

void solve(std::istream& is, std::ostream& os) {
    Num n, m;
    is >> n >> m;

    edges.resize(n);
    Vec degs(n);
    for(Num i{0}; i<m; ++i) {
        Num a, b;
        is >> a >> b;
        --a;
        --b;
        edges.at(a).push_back(b);
        edges.at(b).push_back(a);
        degs.at(a) += 1;
        degs.at(b) += 1;
    }

    if (n == 2) {
        os << "2\n1 2\n";
        return;
    }

    std::vector<Vec> ds(n);
    for(Num i{0}; i<n; ++i) {
        const auto d = degs.at(i);
        ds.at(d).push_back(i);
    }

    Set seen;
    Num init {0};
    for(Num i{0}; i<n; ++i) {
        if (!ds.at(i).empty()) {
            init = ds.at(i).at(0);
            break;
        }
    }

    Vec ans {init};
    seen.insert(init);
    Set req;
    for(const auto& v : edges[init]) {
        req.insert(v);
    }

    visit_dfs(ans, seen, req, init);

    os << ans.size() << "\n";
    const auto size = ans.size();
    for(size_t i{0}; i<size; ++i) {
        os << (1 + ans.at(i)) << (((i+1) == size) ? '\n' : ' ');
    }
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

提出情報

提出日時
問題 B - Hamiltonish Path
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 500
コード長 3238 Byte
結果 AC
実行時間 115 ms
メモリ 35240 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 3
AC × 19
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 1 ms 3564 KiB
sample_02.txt AC 1 ms 3628 KiB
sample_03.txt AC 1 ms 3560 KiB
subtask_1_01.txt AC 47 ms 10656 KiB
subtask_1_02.txt AC 14 ms 5548 KiB
subtask_1_03.txt AC 40 ms 10636 KiB
subtask_1_04.txt AC 46 ms 9800 KiB
subtask_1_05.txt AC 47 ms 9692 KiB
subtask_1_06.txt AC 71 ms 14828 KiB
subtask_1_07.txt AC 52 ms 13304 KiB
subtask_1_08.txt AC 48 ms 13268 KiB
subtask_1_09.txt AC 115 ms 35240 KiB
subtask_1_10.txt AC 16 ms 5376 KiB
subtask_1_11.txt AC 20 ms 5648 KiB
subtask_1_12.txt AC 1 ms 3512 KiB
subtask_1_13.txt AC 1 ms 3700 KiB