Submission #841284

#TimeUsernameProblemLanguageResultExecution timeMemory
841284serifefedartarPolitical Development (BOI17_politicaldevelopment)C++17
16 / 100
3085 ms45816 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); typedef long long ll; #define f first #define s second #define MOD 1000000007 #define LOGN 20 #define MAXN 200005 vector<set<int>> graph; int main() { fast int N, K, x, D; cin >> N >> K; graph = vector<set<int>>(N, set<int>()); queue<int> q; for (int i = 0; i < N; i++) { cin >> D; for (int j = 0; j < D; j++) { cin >> x; graph[x].insert(i); graph[i].insert(x); } if (D <= K) q.push(i); } int ans = 1; while (!q.empty()) { int node = q.front(); q.pop(); int degree = graph[node].size(); vector<int> adj; for (auto u : graph[node]) adj.push_back(u); int mx_mask = (1<<degree) - 1; for (int msk = 1; msk <= mx_mask; msk++) { int k = __builtin_popcount(msk); if (k + 1 <= ans) continue; vector<int> taken; taken.push_back(node); bool check = true; for (int j = 0; j < degree; j++) { if ((1<<j) & msk) { for (auto u : taken) { if (graph[adj[j]].count(u) == 0) check = false; } taken.push_back(adj[j]); } } if (check) ans = max(ans, k + 1); } for (auto u : graph[node]) { graph[u].erase(node); if (graph[u].size() <= K) q.push(u); } } cout << ans << "\n"; }

Compilation message (stderr)

politicaldevelopment.cpp: In function 'int main()':
politicaldevelopment.cpp:66:24: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   66 |    if (graph[u].size() <= K)
      |        ~~~~~~~~~~~~~~~~^~~~
#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...