Loading...
Submission
# When Author Problem Language CPU Memory
7781 2023-04-12 01:29:11 Rakib Squirrel and Relocation C++ 17 10 ms 3588 kb Wrong Answer - 15
Test Cases
# CPU Memory Points
1 3 ms 3308 kb 1 Accepted
2 3 ms 3328 kb 1 Accepted
3 3 ms 3524 kb 1 Accepted
4 7 ms 3348 kb 1 Accepted
5 10 ms 3496 kb 1 Accepted
6 6 ms 3508 kb 1 Accepted
7 4 ms 3512 kb 1 Accepted
8 5 ms 3440 kb 1 Accepted
9 6 ms 3512 kb 1 Accepted
10 4 ms 3508 kb 1 Accepted
11 4 ms 3560 kb 1 Accepted
12 6 ms 3576 kb 1 Accepted
13 7 ms 3588 kb 1 Accepted
14 6 ms 3420 kb 1 Accepted
15 4 ms 3372 kb 0 Wrong Answer
16 0 ms 0 kb 0 Skipped
17 0 ms 0 kb 0 Skipped
18 0 ms 0 kb 0 Skipped
19 0 ms 0 kb 0 Skipped
20 0 ms 0 kb 0 Skipped
21 0 ms 0 kb 0 Skipped
22 0 ms 0 kb 0 Skipped
23 0 ms 0 kb 0 Skipped
24 0 ms 0 kb 0 Skipped
25 0 ms 0 kb 0 Skipped
26 0 ms 0 kb 0 Skipped
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. int 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.