Submission #1328682

#TimeUsernameProblemLanguageResultExecution timeMemory
1328682loomPolitical Development (BOI17_politicaldevelopment)C++20
100 / 100
323 ms27044 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf (int)2e18
#define _ <<' '<<
#define nl '\n'

void solve(){
   int n, k;
   cin>>n>>k;

   set<int> g[n];

   for(int i = 0; i < n; i++){
      int m;
      cin>>m;

      for(int j = 0; j < m; j++){
         int x;
         cin>>x;

         g[i].insert(x);
         g[x].insert(i);
      }
   }

   set<pair<int,int>> st;

   for(int i = 0; i < n; i++){
      st.insert({g[i].size(), i});
   }

   int ans = 1;

   while(!st.empty()){
      int v = st.begin()->second;
      st.erase(st.begin());

      auto &gv = g[v];
      n = gv.size();

      vector<int> nb(n);
      int i = 0;

      for(int a : gv){
         int j = 0;

         for(int b : gv){
            if(i < j and g[a].count(b)){
               nb[i] += (1<<j);
               nb[j] += (1<<i);
            }

            j++;
         }

         nb[i] += (1<<i);
         i++;
      }

      int dp[1<<n];
      dp[0] = 1;

      for(int mk = 1; mk < 1<<n; mk++){
         dp[mk] = 0;
         int cnt = 0;
         for(int i = 0; i < n; i++) if(mk & 1<<i) cnt++;

         for(int i = 0; i < n; i++){
            if(mk & 1<<i and (nb[i] & mk) == mk and dp[mk - (1<<i)]){
               ans = max(ans, cnt+1);
               dp[mk] = 1;
            }
         }
      }

      for(int x : gv){
         st.erase({g[x].size(), x});
         g[x].erase(v);
         st.insert({g[x].size(), x});
      }
   }  

   cout<<ans;
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   int t = 1;
   //cin>>t;
   while(t--) solve();

   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...