結果
問題 |
No.2428 Returning Shuffle
|
ユーザー |
![]() |
提出日時 | 2023-08-18 23:03:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 900 bytes |
コンパイル時間 | 2,705 ms |
コンパイル使用メモリ | 210,504 KB |
最終ジャッジ日時 | 2025-02-16 10:37:25 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 9 WA * 14 |
ソースコード
#include <bits/stdc++.h> using namespace std; #include <atcoder/modint> using mint = atcoder::modint998244353; #include <atcoder/scc> int main() { int n, m; cin >> n >> m; vector<int> p(n); iota(p.begin(), p.end(), 0); for (int i = 0; i < m; i++) { int t; cin >> t; vector<int> s(t); for (int j = 0; j < t; j++) { cin >> s[j]; s[j]--; } int start = p[s[t - 1]]; for (int j = t - 2; j >= 0; j--) { p[s[j + 1]] = p[s[j]]; } p[s[0]] = start; } atcoder::scc_graph g(n); int ed = 0; for (int i = 0; i < n; i++) { if (i == p[i]) { continue; } ed++; g.add_edge(i, p[i]); } if (ed == 0) { cout << 1 << endl; return 0; } auto res = g.scc(); mint sum = 1; int gd = 0; for (auto x : res) { sum *= x.size(); gd = __gcd(gd, (int)x.size()); } sum /= gd; cout << sum.val() << endl; }