Submission #1035304

# Submission time Handle Problem Language Result Execution time Memory
1035304 2024-07-26T09:06:55 Z vjudge1 Political Development (BOI17_politicaldevelopment) C++17
0 / 100
8 ms 22108 KB
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math,inline")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,lzcnt,mmx,abm,avx,avx2,fma")
#include <bits/stdc++.h>
using namespace std;

const int N = 5e4;

mt19937 rng(time(nullptr) + 69);

int n, k, cnt[N];
vector<int> rem, adj[N];
bitset<N> bt[N], curr;

bool solve(int tot, int x, int y) {
  //cerr << tot << " " << x << " " << y << " " << curr.count() << endl;
  if (curr.count() < tot) return 0;
  else if (!x) return 1;

  // tengo que pillar x mas, mayores que y, tengo curr odiados

  vector<int> temp;
  int sz = rem.size();
  for (int i = sz-1; i >= 0; i--) {
    if (rem[i] <= y) break;
    temp.push_back(rem[i]);
  }
  shuffle(temp.begin(), temp.end(), rng);

  sz = temp.size();
  if (sz < x-1) return 0;
  for (int i = 0; i < sz; i++) {
    bitset<N> prv = curr;
    curr &= bt[temp[i]];
    if (solve(tot, x-1, temp[i])) return 1;
    swap(curr, prv);
  }
  return 0;
}

signed main() {
  ios::sync_with_stdio(false); cin.tie(nullptr);

  cin >> n >> k;
  memset(cnt, 0, sizeof(cnt));
  rem.resize(n);
  for (int i = 0; i < n; i++) {
    rem[i] = i;
    int x; cin >> x;
    bt[i][i] = 1;
    cnt[i]++;
    adj[i].push_back(i);
    for (int j = 0; j < x; j++) {
      int y; cin >> y;
      bt[i][y] = 1;
      cnt[y]++;
      adj[i].push_back(y);
    }
  }

  int ans = 0;
  for (int i = 1; i <= k; i++) {
    curr.reset();
    for (int& j : rem) curr[j] = 1;
    if (!solve(i, i, -1)) break;
    ans = i;

    // limpiar
    //while (1) {
      int sz = rem.size();
      vector<int> nw;
      bool ch = 0;
      for (int j = 0; j < sz; j++) {
        int c = 0;
        for (int& k : adj[rem[j]]) {
          if (cnt[k] >= i) c++; 
        }
        if (c >= i) {
          nw.push_back(rem[j]);
          continue;
        }
        ch = 1;
        for (int& k : adj[rem[j]]) {
          cnt[k]--;
        }
      }
      swap(nw, rem);
      if (!ch) break;
    //}
  }

  cout << ans << "\n";
}

Compilation message

politicaldevelopment.cpp: In function 'bool solve(int, int, int)':
politicaldevelopment.cpp:16:20: warning: comparison of integer expressions of different signedness: 'std::size_t' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   16 |   if (curr.count() < tot) return 0;
      |       ~~~~~~~~~~~~~^~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 8 ms 22108 KB Output is correct
2 Incorrect 1 ms 1884 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 1624 KB Output isn't correct
2 Halted 0 ms 0 KB -