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
// @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; int 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; }