Submission #534642

#TimeUsernameProblemLanguageResultExecution timeMemory
534642shrimbCarnival (CEOI14_carnival)C++17
20 / 100
125 ms300 KiB
#include"bits/stdc++.h" #define int long long // #define endl '\n' using namespace std; int dsu[2000001]; int ans[2000001]; int Find (int x) { return dsu[x] == x ? x : dsu[x] = Find(dsu[x]); } void Union (int a, int b) { dsu[Find(a)] = Find(b); } bool Query (int a, int b) { cout << "2 " << a << " " << b << endl; int x; cin >> x; return x == 1; } signed main () { int n; cin >> n; set<pair<int,int>> s; vector<int> num; for (int i = 1 ; i <= n ; i++) s.insert({1, i}), dsu[i] = i; while (s.size() > 1) { auto [X, Y] = *--s.end(); s.erase(--s.end()); bool found = 0; for (auto [A, B] : s) { if (Query(Y, B)) { found = 1; Union(B, Y); s.erase({A, B}); s.insert({A + X, Find(B)}); break; } } if (!found) { num.push_back(Y); } } auto [X, Y] = *s.begin(); num.push_back(Y); int c = 1; for (int i = 1 ; i <= n ; i++) if (dsu[i] == i) ans[i] = c++; cout << 0 << " "; for (int i = 1 ; i <= n ; i++) cout << ans[Find(i)] << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...