Submission #925191

#TimeUsernameProblemLanguageResultExecution timeMemory
925191restingPolitical Development (BOI17_politicaldevelopment)C++17
100 / 100
224 ms9468 KiB
#include <bits/stdc++.h> using namespace std; void solve(){ int n, k; cin >> n >> k; vector<vector<int>> adj(n); set<pair<int,int>> uwu; vector<int> cnt(n); vector<int> vis(n, 0); for(int i = 0; i < n; i++){ cin >> cnt[i]; uwu.insert({cnt[i], i}); adj[i] = vector<int>(cnt[i]); for(auto &x : adj[i]) cin >> x; sort(adj[i].begin(), adj[i].end()); //yeee } int ans = 1; while(uwu.size()){ int i = uwu.begin()->second; vis[i] = 1; uwu.erase(uwu.begin()); vector<int> clique = {i}; for(auto &x : adj[i]){ if(vis[x]) continue; clique.push_back(x); uwu.erase({cnt[x], x}); cnt[x]--; uwu.insert({cnt[x], x}); } int sz = clique.size(); vector<vector<int>> adj2(sz, vector<int>(sz, 0)); for(int i = 0; i < sz; i++){ for(int j = 0; j < sz; j++){ int i2 = clique[i]; int j2 = clique[j]; auto it = lower_bound(adj[i2].begin(), adj[i2].end(), j2); if(it != adj[i2].end() && (*it) == j2) adj2[i][j] = 1; } } vector<int> possible((1<<sz), 0); vector<int> log2((1<<sz), 0); for(int i = 0; i < sz; i++) log2[(1<<i)] = i; for(int i = 0; i < (1<<sz); i++){ if(i==0){possible[i] = 1; continue;} int lsb = (i&-i); int j = i^lsb; possible[i] = possible[j]; while(j){ int lsb2 = (j&-j); possible[i] &= adj2[log2[lsb]][log2[lsb2]]; j ^= lsb2; } if(possible[i]) ans = max(ans, (int)__builtin_popcount(i)); } } cout<<ans<<endl; } signed main() { cin.tie(0)->sync_with_stdio(0); int t = 1;// cin >> t; while(t--) solve(); }
#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...