Submission #245101

#TimeUsernameProblemLanguageResultExecution timeMemory
245101Tc14Political Development (BOI17_politicaldevelopment)C++17
23 / 100
3072 ms5496 KiB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ve vector
typedef long long ll;

const int MAXN = 50000;

int r;
ve<int> G[MAXN];
ve<int> S;

bool disagree(int a, int b) {
    for (int i : G[a]) {
        if (i == b) return true;
    }
    return false;
}

void f(int a, int i, int d, int s) {

    bool valid;

    if (i == d) r = max(r, s);
    else {
        f(a, i + 1, d, s);

        valid = true;
        for (int j = 0; j < s; j++) {
            if (!disagree(S[j], G[a][i]) || !disagree(G[a][i], S[j])) {
                valid = false;
                break;
            }
        }

        if (valid) {
            S.push_back(G[a][i]);
            f(a, i + 1, d, s + 1);
            S.pop_back();
        }
    }
}

int main() {

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, k, d, a;

    cin >> n >> k;

    for (int i = 0; i < n; i++) {
        cin >> d;
        for (int j = 0; j < d; j++) {
            cin >> a;
            if (a != i) G[i].push_back(a);
        }
    }

    r = 1;
    for (int i = 0; i < n; i++) {
        S = {i};
        f(i, 0, G[i].size(), 1);
    }

    cout << r << endl;

    return 0;
}
#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...