algo — C++23 日本語リファレンス GitHub

test/aoj/jag/functional_graph.test.cpp

AC · 最終更新 2026-10-23 · GitHub

問題: https://onlinejudge.u-aizu.ac.jp/problems/2970

依存するヘッダ(5)
実装
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/problems/2970
#include <iostream>
#include <vector>
#include "graph/functional_graph.hpp"
#include "number_theory/chinese_rem.hpp"

int main(void) {
    int n;
    std::cin >> n;
    std::vector<int> p(n), q(n);
    for (int &e : p) std::cin >> e, --e;
    for (int &e : q) std::cin >> e, --e;

    functional_graph fg(q);
    std::vector<int> b(n), m(n);
    for (int i = 0; i < n; ++i) {
        b[i] = fg.dist(p[i], i);
        if (b[i] == -1) {
            std::cout << -1 << '\n';
            return 0;
        }
        m[i] = fg.cycle_length(i);
    }
    auto [x, y] = chinese_rem(b, m);
    std::cout << (y == -1 ? -1 : x) << '\n';

    return 0;
}