Submission
# | When | Author | Problem | Language | CPU | Memory | |
---|---|---|---|---|---|---|---|
7782 | 2023-04-12 01:30:50 | Rakib | Squirrel and Relocation | C++ 17 | 151 ms | 8744 kb | Accepted |
Test Cases
# | CPU | Memory | Points | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 ms | 3532 kb | 1 | Accepted | |||||||
2 | 3 ms | 3400 kb | 1 | Accepted | |||||||
3 | 4 ms | 3416 kb | 1 | Accepted | |||||||
4 | 7 ms | 3476 kb | 1 | Accepted | |||||||
5 | 8 ms | 3336 kb | 1 | Accepted | |||||||
6 | 5 ms | 3344 kb | 1 | Accepted | |||||||
7 | 6 ms | 3416 kb | 1 | Accepted | |||||||
8 | 4 ms | 3344 kb | 1 | Accepted | |||||||
9 | 6 ms | 3452 kb | 1 | Accepted | |||||||
10 | 5 ms | 3348 kb | 1 | Accepted | |||||||
11 | 5 ms | 3348 kb | 1 | Accepted | |||||||
12 | 5 ms | 3336 kb | 1 | Accepted | |||||||
13 | 6 ms | 3552 kb | 1 | Accepted | |||||||
14 | 6 ms | 3504 kb | 1 | Accepted | |||||||
15 | 4 ms | 3348 kb | 1 | Accepted | |||||||
16 | 6 ms | 3548 kb | 1 | Accepted | |||||||
17 | 5 ms | 3484 kb | 1 | Accepted | |||||||
18 | 24 ms | 3532 kb | 1 | Accepted | |||||||
19 | 19 ms | 3404 kb | 1 | Accepted | |||||||
20 | 40 ms | 3496 kb | 1 | Accepted | |||||||
21 | 30 ms | 3496 kb | 1 | Accepted | |||||||
22 | 33 ms | 3796 kb | 1 | Accepted | |||||||
23 | 49 ms | 3908 kb | 1 | Accepted | |||||||
24 | 33 ms | 3916 kb | 1 | Accepted | |||||||
25 | 106 ms | 6264 kb | 1 | Accepted | |||||||
26 | 151 ms | 8744 kb | 1 | Accepted | |||||||
Source Code
// @Rakibul-Islam :) #include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 1e18; const int inf = 2e9; const int mod = 1e9+7; const int N = 1e6+10; const int p = 998244353; class DSU{ public: vector<int> p, sz; DSU(int n) : p(n), sz(n, 1) { iota(p.begin(), p.end(), 0); } int find(int x){ if(x==p[x])return x; return p[x] = find(p[x]); } bool same(int x, int y){return find(x)==find(y);} bool marge(int x, int y){ x = find(x); y = find(y); if(x==y)return false; if(sz[x]<sz[y])swap(sz[x], sz[y]); sz[x] += sz[y]; p[y] = x; return true; } int sze(int x){return sz[find(x)];} }; void testcase(){ int n; cin>>n; DSU dsu(n+1); for(int i=1; i<=n; i++){ int x; cin>>x; dsu.marge(i, x); } set<int> s; ll ans = 1; for(int i=1; i<=n; i++){ if(s.count(dsu.find(i)))continue; (ans *= dsu.sze(i)) %= p; s.insert(dsu.find(i)); } cout<<ans<<"\n"; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int testCase = 1; cin>>testCase; cout<<fixed<<setprecision(20); for(int i=1;i<=testCase; i++){ //cout<<"Case "<<i<<": "; testcase(); } return 0; }