Submission #1306197

#TimeUsernameProblemLanguageResultExecution timeMemory
1306197limon4ickPolitical Development (BOI17_politicaldevelopment)C++20
27 / 100
445 ms25224 KiB
/*#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") 
#pragma GCC optimize("Ofast") 
#pragma GCC target("avx,avx2,fma") 
#pragma GCC optimization("unroll-loops") 
#pragma ("reroll") */
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define ins insert
#define F first
#define S second
const int mod = 1e9 + 7,N = 50010,inf = 1e18;
vector<int>v[N];
int ans = 1;
vector<int>g;
int n,k;
void rec(int pos,int cnt){
    if(cnt==k) return;
    for(auto x:v[pos]){
        bool ok = 1;
        for(auto y:g){
            bool okk = 0;
            for(auto z:v[y]){
                if(z==x) okk = 1;
            }
            if(!okk) ok = 0;
        }
        if(ok){
            cnt++;
            ans = max(ans,cnt);
            g.pb(x);
            rec(x,cnt);
            g.pop_back();
            cnt--;
        }
    }
}
signed main(){
    //freopen("snnfsn.in","r",stdin)
    //freopen("snnfsn.out","w",stdout)
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> k;
    for(int i = 0;i<n;i++){
        int a;
        cin >> a;
        for(int j = 1;j<=a;j++){
            int x;
            cin >> x;
            v[i].pb(x);
        }
    }
    if(k<=3 && n<=5000){
        bool was[n][n];
        for(int i = 0;i<n;i++){
            for(auto x:v[i]){
                was[i][x] = 1;
            }
        }
        int ans = 1;
        if(k==3){
            for(int i = 0;i<n;i++){
                for(int j = i+1;j<n;j++){
                    if(!was[i][j]) continue;
                    for(int k = j+1;k<n;k++){
                        if(was[i][j] && was[j][k] && was[i][k]) {ans = 3;break;}
                    }
                    ans = max(ans,2ll);
                    if(ans==3) break;
                }
                if(ans==3) break;
            }
        }
        else{
            for(int i = 0;i<n;i++){
                for(int j = i + 1;j<n;j++){
                    if(was[i][j]) ans = 2;
                }
            }
        }
        cout << ans;
        return 0;
    }
    for(int i = 0;i<n;i++){
        g.pb(i);
        rec(i,1);
        g.pop_back();
    }
    cout << ans;
}
#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...