Submission #310658

#TimeUsernameProblemLanguageResultExecution timeMemory
310658MrDominoPolitical Development (BOI17_politicaldevelopment)C++14
77 / 100
3074 ms8184 KiB
#include <bits/stdc++.h> using namespace std; const int N=50000+7; int n; int k; int sol; vector<int> g[N]; set<pair<int,int>> s; void del(int x) { for (auto &i : g[x]) { vector<int> gnew_i; for (auto &y : g[i]) { if (y!=x) gnew_i.push_back(y); } s.erase({(int) g[i].size(),i}); s.insert({(int) g[i].size()-1,i}); g[i]=gnew_i; } g[x].clear(); } bool on[N]; int sum[N]; int cur; void bkt(int node) { cur++; for (auto &it : g[node]) sum[it]++; on[node]=1; if (cur>sol) sol=cur; int possible=0; vector<int>lol; for (auto &x : g[node]) { if ((cur==1||(int)g[node].size()>=(int)g[x].size())&&on[x]==0&&sum[x]==cur) { possible++; } } if (cur+possible<=sol) { on[node]=0; cur--; for (auto &it : g[node]) sum[it]--; return; } for (auto &x : g[node]) { if ((cur==1||(int)g[node].size()>=(int)g[x].size())&&on[x]==0&&sum[x]==cur) { bkt(x); } } on[node]=0; cur--; for (auto &it : g[node]) sum[it]--; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin>>n>>k; for (int i=0;i<n;i++) { int l; cin>>l; for (int j=1;j<=l;j++) { int x; cin>>x; g[i].push_back(x); } sort(g[i].begin(),g[i].end()); s.insert({(int)g[i].size(),i}); } while (!s.empty()) { auto it=*s.begin(); s.erase(it); int node=it.second; bkt(node); del(node); } cout<<sol<<"\n"; }
#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...