Submission #1179476

#TimeUsernameProblemLanguageResultExecution timeMemory
1179476AlishPolitical Development (BOI17_politicaldevelopment)C++20
77 / 100
3094 ms6028 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef long double ld; #define F first #define S second #define pb push_back #define endl '\n' #define Mp make_pair #define all(x) x.begin(), x.end() #define debug(x) cerr << #x << " = " << x << endl; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("input19.txt" , "r" , stdin) ; const int N = 5e4+23, K=13; vector<int> g[N]; int G[N], dp[1<<K]; int ind[N], deg[N]; int n, k; int f(vector<int> vec){ sort(all(vec)); int n=vec.size(); for (int i=0; i<n; i++){ G[i]=0; for (int u: g[vec[i]]){ int t=lower_bound(all(vec), u)-vec.begin(); if(t<vec.size() && vec[t]==u)G[i]|=(1<<t); } } for (int mask=1; mask<(1<<n); mask++){ int k=__builtin_ctz(mask); dp[mask]=max(dp[mask^(1<<k)], dp[mask&G[k]]+1); } return dp[(1<<n)-1]; } int main() { fast_io cin>>n>>k; queue<int> q; for (int i=0; i<n; i++){ cin>>deg[i]; for (int j=0; j<deg[i]; j++){ int u; cin>>u; g[i].pb(u); } if(deg[i]<k) q.push(i); } int num=0; while(!q.empty()){ int v=q.front(); q.pop(); ind[v]=num++; for (int u: g[v]){ deg[u]--; if(deg[u]==k-1) q.push(u); } } int ans=1; for (int v=0; v<n; v++){ vector<int> vec; vec.pb(v); for (int u: g[v]) if(ind[v]<ind[u]) vec.pb(u); ans=max(ans, f(vec)); } 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...