Submission #47551491


Source Code Expand

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

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>>;
}

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

    Edges edges(n);
    std::map<std::pair<Num, Num>, Num> weights;
    std::vector<std::tuple<Num, Num, Num>> queries(q);
    atcoder::dsu tree(n);

    for(Num i{0}; i<q; ++i) {
        Num a, b, d;
        is >> b >> a >> d;
        --a;
        --b;
        queries.at(i) = std::make_tuple(a, b, d);

        if (!tree.same(a, b)) {
            tree.merge(a, b);
            edges[a].push_back(b);
            edges[b].push_back(a);
            weights[std::make_pair(a,b)] = d;
            weights[std::make_pair(b,a)] = -d;
        }
    }

    std::vector<std::optional<Num>> distances(n);
    for(Num i{0}; i<n; ++i) {
        if (distances.at(i).has_value()) {
            continue;
        }

        Q<Num> q;
        auto current = tree.leader(i);
        distances.at(current) = 0;
        q.push(current);

        while(!q.empty()) {
            const auto current = q.front();
            q.pop();

            for(const auto& next : edges[current]) {
                if (distances.at(next).has_value()) {
                    continue;
                }
                distances.at(next) = distances.at(current).value() + weights.at(std::make_pair(current, next));
                q.push(next);
            }
        }
    }

    Vec answer;
    for(Num i{0}; i<q; ++i) {
        const auto& [a, b, d] = queries.at(i);
        const auto dist = distances.at(b).value() - distances.at(a).value();
        if (dist == d) {
            answer.push_back(i+1);
        }
    }

    const auto size = answer.size();
    for(size_t i{0}; i<size; ++i) {
        os << answer.at(i);
        if ((i+1) == size) {
            os << "\n";
        } else {
            os << " ";
        }
    }
}

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

Submission Info

Submission Time
Task F - Good Set Query
User zettsut
Language C++ 20 (gcc 12.2)
Score 525
Code Size 2509 Byte
Status AC
Exec Time 407 ms
Memory 52420 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 3
AC × 39
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, example0.txt, example1.txt, example2.txt, hack_001.txt, hack_002.txt
Case Name Status Exec Time Memory
000.txt AC 60 ms 8836 KiB
001.txt AC 104 ms 10060 KiB
002.txt AC 104 ms 18656 KiB
003.txt AC 91 ms 16468 KiB
004.txt AC 101 ms 17456 KiB
005.txt AC 251 ms 49728 KiB
006.txt AC 247 ms 49784 KiB
007.txt AC 252 ms 52420 KiB
008.txt AC 245 ms 52412 KiB
009.txt AC 101 ms 10100 KiB
010.txt AC 87 ms 7896 KiB
011.txt AC 88 ms 8820 KiB
012.txt AC 85 ms 9980 KiB
013.txt AC 67 ms 9896 KiB
014.txt AC 89 ms 7896 KiB
015.txt AC 94 ms 8820 KiB
016.txt AC 100 ms 9920 KiB
017.txt AC 72 ms 10148 KiB
018.txt AC 90 ms 8008 KiB
019.txt AC 98 ms 8912 KiB
020.txt AC 105 ms 10096 KiB
021.txt AC 77 ms 10092 KiB
022.txt AC 94 ms 8196 KiB
023.txt AC 102 ms 9280 KiB
024.txt AC 108 ms 10452 KiB
025.txt AC 85 ms 10380 KiB
026.txt AC 115 ms 12332 KiB
027.txt AC 123 ms 12944 KiB
028.txt AC 130 ms 14020 KiB
029.txt AC 111 ms 13980 KiB
030.txt AC 407 ms 45732 KiB
031.txt AC 402 ms 45684 KiB
032.txt AC 400 ms 45596 KiB
033.txt AC 383 ms 45700 KiB
example0.txt AC 1 ms 3516 KiB
example1.txt AC 10 ms 11896 KiB
example2.txt AC 1 ms 3508 KiB
hack_001.txt AC 1 ms 3484 KiB
hack_002.txt AC 1 ms 3572 KiB