Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include "icc.h"
  3. using namespace std;
  4. #define ii pair <int, int>
  5. #define app push_back
  6. #define all(a) a.begin(), a.end()
  7. #define bp __builtin_popcount
  8. #define ll long long
  9. #define mp make_pair
  10. #define f first
  11. #define s second
  12. const int N = 101;
  13. mt19937 rnd(time(0));
  14. int ar[N], br[N];
  15. bool quer(vector <int> a, vector <int> b) {
  16. if (a.empty() || b.empty()) return 0;
  17. for (int i = 0; i < a.size(); ++i) ar[i] = a[i] + 1;
  18. for (int i = 0; i < b.size(); ++i) br[i] = b[i] + 1;
  19. return query(a.size(), b.size(), ar, br);
  20. }
  21. ii get(vector <int> a, vector <int> b) {
  22. if (a.size() == 1 && b.size() == 1) return {a[0], b[0]};
  23. if (a.size() == 1) swap(a, b);
  24. vector <int> l, r;
  25. int m = a.size() / 2;
  26. for (int i = 0; i < m; ++i) l.app(a[i]);
  27. for (int i = m; i < (int)a.size(); ++i) r.app(a[i]);
  28. if (quer(l, b)) return get(l, b);
  29. else return get(r, b);
  30. }
  31. vector <int> a[N];
  32. int c[N];
  33. void run(int n) {
  34. for (int i = 0; i < n; ++i) { a[i].app(i); c[i] = i; }
  35. for (int e = 0; e < n - 1; ++e) {
  36. while (1) {
  37. vector <int> l, r;
  38. for (int i = 0; i < n; ++i) {
  39. if (rnd() & 1) { for (int e : a[i]) l.app(e); }
  40. else { for (int e : a[i]) r.app(e); }
  41. }
  42. if (quer(l, r)) {
  43. ii ans = get(l, r);
  44. setRoad(ans.first + 1, ans.second + 1);
  45. int c1 = c[ans.first], c2 = c[ans.second];
  46. for (int e : a[c2]) { a[c1].app(e); c[e] = c1; }
  47. a[c2].clear();
  48. break;
  49. }
  50. }
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement