Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cassert>
- #include <algorithm>
- #include <vector>
- #include <unordered_map>
- #include "optimization.h"
- #include <map>
- #define all(a) a.begin, a.end()
- using namespace std;
- int main() {
- int counter = 0;
- int n, x, y;
- n = readInt();
- x = readInt();
- y = readInt();
- vector<bool> mark((1 << (n+1)), false);
- vector<bool> deleted((1 << (n + 1)), false);
- for (int i = 0; i < x; i++) {
- int count = readInt();
- unsigned int cur = 0;
- for (int j = 0; j < count; j++) {
- int temp = readInt();
- temp--;
- cur |= (1 << temp);
- }
- mark[cur] = true;
- }
- vector<int> ready((1<<(n+1)));
- for (int i = 0; i < y; i++) {
- int count = readInt();
- unsigned int cur = 0;
- for (int j = 0; j < count; j++) {
- int temp = readInt();
- temp--;
- cur |= (1 << temp);
- }
- deleted[cur] = true;
- }
- for (int k = (1 << (n)) - 1; k >= 0; --k) {
- if ((mark[k] && ready[k] == 0) || deleted[k]) {
- int value = -1;
- if (mark[k] && ready[k] == 0 && !deleted[k]) value = 1;
- for (int B = k; B > 0; B--, B &= k) {
- if (ready[B] != -1) {
- ready[B] = value;
- }
- }
- if (ready[0] != -1) {
- ready[0] = value;
- }
- }
- }
- for (int i = 0; i < (1 << (n+1)); i++){
- if (ready[i] == 1) counter++;
- }
- writeInt(counter);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement