Submission #830636

#TimeUsernameProblemLanguageResultExecution timeMemory
830636JohannPolitical Development (BOI17_politicaldevelopment)C++14
100 / 100
249 ms27564 KiB
// gets sub1+sub2
#include <bits/stdc++.h>

using namespace std;

#define vb vector<bool>
#define vi vector<int>
#define vvi vector<vi>
#define sz(x) (int) (x).size()
#define all(x) (x).begin(), (x).end()
#define F0R(i, n) for (int i = 0; i < (n); ++i)
#define tiii tuple<int,int,int>
#define vtiii vector<tiii>


int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int N, K;
    cin >> N >> K;
    vector<set<int>> adj(N);
    vi d(N);
    vb active(N, true);
    queue<int> q;
    F0R(i, N) {
        int u;
        cin >> d[i];
        F0R(j, d[i]) cin >> u, adj[i].insert(u);
        if (d[i] < K) q.push(i);
    }

    int res = 1;
    while (!q.empty()) {
        int v = q.front();
        q.pop();
        if (!active[v]) continue;

        vi neig;
        for (int u: adj[v]) {
            if (active[u]) {
                neig.push_back(u);
            }
        }
        vi bm(sz(neig));
        for (int i = 0; i < sz(neig); ++i) {
            bm[i] = 1 << i;
            for (int j = 0; j < sz(neig); ++j) {
                if (adj[neig[i]].find(neig[j]) != adj[neig[i]].end()) {
                    bm[i] |= 1 << j;
                }
            }
        }

        for (int sel = 0; sel < (1 << sz(neig)); ++sel) {
            int m = sel;
            for (int i = 0; i < sz(neig); ++i) {
                if ((sel & (1 << i)) > 0) {
                    m &= bm[i];
                }
            }
            res = max(res, __builtin_popcount(m) + 1);
        }

        active[v] = false;
        for (int u: neig) {
            --d[u];
            if (d[u] < K) q.push(u);
        }
    }
    cout << res << endl;
}
#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...