제출 #1244648

#제출 시각아이디문제언어결과실행 시간메모리
1244648fskaricaICC (CEOI16_icc)C++20
0 / 100
186 ms632 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; #define ll long long #define fi first #define se second #define pii pair<int, int> const int MAX = 110; int n; int parent[MAX]; int depth[MAX]; vector <int> v[MAX]; vector <int> groups; int find(int a) { if (a == parent[a]) return a; return parent[a] = find(parent[a]); } void spoji(int a, int b) { setRoad(a, b); a = find(a); b = find(b); if (a == b) return; if (depth[a] >= depth[b]) { depth[a] += depth[b]; parent[b] = a; for (auto e : v[b]) v[a].push_back(e); } else { depth[b] += depth[a]; parent[a] = b; for (auto e : v[a]) v[b].push_back(e); } } int sendQuery(vector <int> a, vector <int> b) { if (a.empty()) return 0; if (b.empty()) return 0; int sza = a.size(); int szb = b.size(); int arra[sza]; int arrb[szb]; for (int i = 0; i < sza; i++) arra[i] = a[i]; for (int i = 0; i < szb; i++) arrb[i] = b[i]; return query(sza, szb, arra, arrb); } void bs(vector <int> a, vector <int> b) { if (a.size() == 1) { if (b.size() == 1) { spoji(a[0], b[0]); } else { bs(b, a); } return; } vector <int> v, v2; for (int i = 0; i < a.size() / 2; i++) v.push_back(a[i]); for (int i = a.size() / 2; i < a.size(); i++) v2.push_back(a[i]); if (sendQuery(v, b)) bs(v, b); else bs(v2, b); } void nadiUnutarGrupe(vector <int> g, vector <int> g2) { vector <int> a, b; for (int i = 1; i <= n; i++) { for (auto e : g) if (find(i) == e) a.push_back(i); for (auto e : g2) if (find(i) == e) b.push_back(i); } bs(a, b); } void solve() { vector <int> g, g2; int bit = 0; while (true) { g.clear(), g2.clear(); for (int i = 0; i < (int)groups.size(); i++) { if (i & (1 << bit)) g.push_back(groups[i]); else g2.push_back(groups[i]); } if (sendQuery(g, g2)) break; bit++; } nadiUnutarGrupe(g, g2); } void run(int N) { n = N; for (int i = 1; i <= n; i++) { parent[i] = i; depth[i] = 1; v[i].push_back(i); } for (int i = 1; i < n; i++) { groups.clear(); for (int j = 1; j <= n; j++) if (find(j) == j) groups.push_back(j); solve(); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...