제출 #1190355

#제출 시각아이디문제언어결과실행 시간메모리
1190355PieArmyPolitical Development (BOI17_politicaldevelopment)C++20
100 / 100
227 ms26476 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second #define endl '\n' using namespace std; int n,k; set<int>komsu[50023]; set<pair<int,int>>st; int dp[1<<10],ne[1<<10]; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n>>k; for(int i=0;i<k;i++){ ne[1<<i]=i; } for(int i=0;i<n;i++){ int d;cin>>d; for(int j=0;j<d;j++){ int x;cin>>x; komsu[i].insert(x); } st.insert({d,i}); } int ans=1; while(st.size()){ int pos=st.begin()->sc; st.erase(st.begin()); vector<int>v,mask; for(int x:komsu[pos]){ v.pb(x); mask.pb(0); st.erase({komsu[x].size(),x}); komsu[x].erase(pos); st.insert({komsu[x].size(),x}); } int m=v.size(); for(int i=0;i<m;i++){ for(int j=0;j<m;j++){ if(komsu[v[i]].find(v[j])!=komsu[v[i]].end())mask[i]+=(1<<j); } } dp[0]=1; for(int i=1;i<(1<<m);i++){ dp[i]=((i&mask[ne[i&-i]])==(i&(i-1))); if(dp[i])dp[i]+=dp[i&(i-1)]; ans=max(ans,dp[i]); } } cout<<ans<<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...