제출 #1306182

#제출 시각아이디문제언어결과실행 시간메모리
1306182zxzuamPolitical Development (BOI17_politicaldevelopment)C++20
39 / 100
3096 ms24512 KiB
#include <bits/stdc++.h>
//#define int int64_t
using namespace std;
constexpr int MAXN = 50009;
set <int> g[MAXN];
vector <int> d;
int ans = 1;
int n, k;
mt19937 rng( chrono::steady_clock::now().time_since_epoch().count() );
void dfs(int v, set <int> vv) {
    if(d[v] < (int)vv.size()) return;
    for(auto j : vv) {
        if( !g[ v ].count( j ) ) {return;}
    }
    vv.insert(v);
    if((int)vv.size() == k) {
        cout << k;
        exit(0);
    }
    ans = max(ans, (int)vv.size() );
    for(auto to : g[v]) {
        if( !vv.count( to ) ) {
            dfs(to, vv);
        }
    }
}
void solve() {
    cin >> n >> k;
    d.resize(n + 1);
    bool sub3 = 1;
    vector <pair <int,int>> vvv;
    for(int i = 1; i <= n; i++ ){
        cin >> d[i];
        vvv.emplace_back( d[i], i );
        if(d[i] > 10) {
            sub3 = 0;
        }
        for(int j = 0; j < d[i]; j++) {
            int x;
            cin >> x;
            x++;
            g[ i ].insert(x);
        }
    }
    if(sub3 == 1 || (k <= 3 && n <= 5000)) {
    for(int i = 1; i <= n; i++) {
        dfs(i, {});
    }
    cout << ans;
    return;
    }
    else{
        for(int i = 1; i <= min(300, n); i++) {
            dfs(i, {});
        }
        for(int i = n; i >= max(1, n - 300); i--) {
            dfs(i, {});
        }
        sort(vvv.begin(), vvv.end());
        reverse(vvv.begin(), vvv.end());
        for(int j = 0; j < min(301, (int)vvv.size()); j++ ){
            int i = vvv[j].second;
            dfs(i, {});
        }
        for(int j = 0; j < 300; j++) {
            int i = rng() % n + 1;
            dfs(i, {});
        }
        cout << ans;
    }
}
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    //freopen("7-router.in", "r", stdin);
    //freopen("7-router.out.txt", "w", stdout);
    int tt = 1;
    //cin >> tt;
    while (tt--){
        solve();
    }
}
#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...