Advertisement
a53

Norela

a53
Nov 21st, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <cassert>
  5.  
  6. #define MOD (1<<13)
  7.  
  8. using namespace std;
  9.  
  10. long long a[32], dp[17200000];
  11. int cnt[MOD + 100], led[MOD + 100];
  12.  
  13. void precalc ()
  14. {
  15. for (int i = 0; i <= MOD + 5; ++i)
  16. {
  17. int ci = i;
  18. for (; ci > 0; ci >>= 1)
  19. {
  20. if (ci & 1) ++cnt[i];
  21. ++led[i];
  22. }
  23. }
  24. }
  25.  
  26. int main ()
  27. {
  28. freopen ("norela.in", "r", stdin);
  29. freopen ("norela.out", "w", stdout);
  30.  
  31. int n, m;
  32. scanf ("%d %d", &n, &m);
  33.  
  34. precalc ();
  35.  
  36. assert (1 <= n && n <= 60);
  37. assert (1 <= m && m <= 24);
  38.  
  39. for (int i = 1; i <= m; ++i)
  40. {
  41. int q;
  42. scanf ("%d", &q);
  43.  
  44. assert (1 <= q && q <= n);
  45.  
  46. for (int j = 1; j <= q; ++j)
  47. {
  48. int x;
  49. scanf ("%d", &x);
  50.  
  51. assert (1 <= x && x <= n);
  52.  
  53. a[m - i + 1] |= (1LL << (1LL * (x - 1)));
  54. }
  55. }
  56.  
  57. int sol, mi = 400;
  58. for (int i = 1; i < (1 << m); ++i)
  59. {
  60. int bit;
  61. if (i >> 13) bit = led[i >> 13] + 13;
  62. else bit = led[i];
  63.  
  64. dp[i] = (dp[i ^ (1 << (bit - 1))] ^ a[bit]);
  65.  
  66. if (dp[i] == (1LL << (1LL * n)) - 1LL)
  67. {
  68. int x = cnt[i >> 13] + cnt[i & ((1 << 13) - 1)];
  69. if (mi >= x) mi = x, sol = i;
  70. }
  71. }
  72.  
  73. printf ("%d\n", mi);
  74. assert (mi < 400);
  75.  
  76. for (int j = m - 1; j >= 0; --j)
  77. if (sol & (1 << j)) printf ("%d ", m - j);
  78.  
  79. printf ("\n");
  80.  
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement