Submission #534614

#TimeUsernameProblemLanguageResultExecution timeMemory
534614shrimbCarnival (CEOI14_carnival)C++17
0 / 100
48 ms352 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.begin(); s.erase(s.begin()); if (X > 1e9) continue; 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; }else { s.insert({X * 2, Y}); 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...