제출 #1284728

#제출 시각아이디문제언어결과실행 시간메모리
1284728enzyPolitical Development (BOI17_politicaldevelopment)C++20
77 / 100
3092 ms8468 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e4+10;
const int maxk=11;
int marc[maxn], deg[maxn], m[maxk][maxk], id[maxn], dp[(1<<maxk)];
vector<int>v[maxn];
int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int n, k; cin >> n >> k;
    set<pair<int,int>>s;
    for(int i=1;i<=n;i++){
        cin >> deg[i];
        for(int j=1;j<=deg[i];j++){
            int x; cin >> x;
            v[i].push_back(++x);
        }
        s.insert({deg[i],i});
    }
    memset(id,-1,sizeof(id));
    int resp=1;
    while(!s.empty()){
        auto f=s.begin();
        int u=f->second;
        marc[u]++;
        s.erase(f);
        vector<int>caras; caras.push_back(u);
        for(int x : v[u]){
            if(!marc[x]){
                s.erase({deg[x],x});
                deg[x]--;
                s.insert({deg[x],x});
                caras.push_back(x);
            }
        }
        int tam=caras.size();
        for(int i=0;i<tam;i++) id[caras[i]]=i;
        for(int i=0;i<tam;i++)
            for(int x : v[caras[i]]) if(id[x]!=-1) m[id[caras[i]]][id[x]]=1;
        for(int i=0;i<tam;i++)
            for(int j=0;j<tam;j++) 
                if(m[i][j]) dp[(1<<i)+(1<<j)]=1;
        for(int i=0;i<(1<<tam);i++){
            int qtd=0;
            for(int k=0;k<tam;k++) if(i&(1<<k)) qtd++; 
            if(dp[i]) resp=max(resp,qtd);
            if(qtd<=2) continue;
            bool ok=true;
            for(int k=0;k<tam;k++){
                if(i&(1<<k)){
                    if(!dp[i^(1<<k)]) ok=false;
                }
            }
            if(ok){
                dp[i]=1;
                resp=max(resp,qtd);
            }
        }
        for(int i=0;i<tam;i++) id[caras[i]]=-1;
        for(int i=0;i<(1<<tam);i++) dp[i]=0;
        for(int i=0;i<tam;i++)
            for(int j=0;j<tam;j++) m[i][j]=0;
    }
    cout << resp << 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...