Submission #550259

#TimeUsernameProblemLanguageResultExecution timeMemory
550259OttoTheDinoPolitical Development (BOI17_politicaldevelopment)C++17
100 / 100
405 ms28780 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (int i = s; i <= e; ++i) #define rrep(i,s,e) for (int i = s; i >= e; --i) #define pb push_back #define pf push_front #define fi first #define se second #define all(a) a.begin(), a.end() #define sz(a) (int)a.size() typedef long long ll; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<int> vi; typedef vector<double> vd; typedef vector<string> vs; typedef vector<ll> vll; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, K, ans = 1; cin >> n >> K; set<int> adj[n+1]; set<ii> st; rep (i,1,n) { int d; cin >> d; rep (j,1,d) { int v; cin >> v; adj[i].insert(v+1); } } rep (i,1,n) st.insert({adj[i].size(), i}); while (!st.empty()) { auto it = st.begin(); int sz = (*it).fi+1, u = (*it).se; st.erase(it); vi bois; bois.pb(u); for (int v : adj[u]) bois.pb(v); while (true) { bool suc = 0; rep (i,0,(1<<sz)-1) { if (__builtin_popcount(i)==ans+1) { bool suc2 = 1; rep (j,0,sz-1) { if (!(i&(1<<j))) continue; rep (k,j+1,sz-1) { if (!(i&(1<<k))) continue; if (adj[bois[j]].find(bois[k])==adj[bois[j]].end()) { suc2 = 0; goto out; } } } out: if (suc2) { suc = 1; break; } } } if (suc) ++ans; else break; } for (int v : adj[u]) { st.erase({adj[v].size(), v}); adj[v].erase(u); st.insert({adj[v].size(), v}); } } cout << ans << "\n"; 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...