Loading...
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
  1. // @Rakibul-Islam :)
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. using ll = long long;
  7. const ll INF = 1e18;
  8. const int inf = 2e9;
  9. const int mod = 1e9+7;
  10. const int N = 1e6+10;
  11. const int p = 998244353;
  12.  
  13. class DSU{
  14. public:
  15. vector<int> p, sz;
  16. DSU(int n) : p(n), sz(n, 1) {
  17. iota(p.begin(), p.end(), 0);
  18. }
  19.  
  20. int find(int x){
  21. if(x==p[x])return x;
  22. return p[x] = find(p[x]);
  23. }
  24.  
  25. bool same(int x, int y){return find(x)==find(y);}
  26.  
  27. bool marge(int x, int y){
  28. x = find(x);
  29. y = find(y);
  30. if(x==y)return false;
  31. if(sz[x]<sz[y])swap(sz[x], sz[y]);
  32. sz[x] += sz[y];
  33. p[y] = x;
  34. return true;
  35. }
  36.  
  37. int sze(int x){return sz[find(x)];}
  38. };
  39.  
  40. void testcase(){
  41. int n;
  42. cin>>n;
  43. DSU dsu(n+1);
  44. for(int i=1; i<=n; i++){
  45. int x; cin>>x;
  46. dsu.marge(i, x);
  47. }
  48.  
  49. set<int> s;
  50. ll ans = 1;
  51. for(int i=1; i<=n; i++){
  52. if(s.count(dsu.find(i)))continue;
  53. (ans *= dsu.sze(i)) %= p;
  54. s.insert(dsu.find(i));
  55. }
  56.  
  57. cout<<ans<<"\n";
  58. }
  59.  
  60. int main(){
  61. ios_base::sync_with_stdio(false);
  62. cin.tie(0);
  63. int testCase = 1;
  64. cin>>testCase;
  65.  
  66. cout<<fixed<<setprecision(20);
  67. for(int i=1;i<=testCase; i++){
  68. //cout<<"Case "<<i<<": ";
  69. testcase();
  70. }
  71. return 0;
  72. }
  73.