Submission #758476

#TimeUsernameProblemLanguageResultExecution timeMemory
758476ByeWorldPolitical Development (BOI17_politicaldevelopment)C++14
100 / 100
1419 ms33872 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
//#define int long long
using namespace std;
typedef pair<int,int> pii;
typedef pair<int, pii> ipii;
const int MAXN = 2e5+10;
const int INF = 1e9+10;
const int SQRT = 500;

int n, k;
int ans = 1;
int d[MAXN];
set <int> adj[MAXN];

class Compare {
    public:
       bool operator()(int a, int b){
           return d[a] > d[b];
      }
};
priority_queue <int, vector<int>, Compare> pq;

void solve(int nw){
	int deg = adj[nw].size();
	if(deg > 11){
		return;
	}

	vector <int> node;
	for(int i=0; i<(1<<deg); i++){//setiap bitmask
		node.clear(); //reset
		auto it = adj[nw].begin(); //idx 1

		for(int j=0; j<deg; j++){
			if(j!=0) it++;
			if((i>>j) & 1){//masuk ke mask
				node.pb(*it); //node neighbour
			}
		}

		bool can = 1;
		for(auto in : node){
			for(auto nei : node){
				if(in == nei) continue;
				if(adj[in].find(nei) == adj[in].end()) can = 0;
			}
		}
		if(can){
			//cout << nw << ' ' << node.size() << "upd\n";
			ans = max(ans, (int) node.size() + 1);
		}
	}
	for(auto in : adj[nw]){
		adj[in].erase(nw);
		d[in]--;
	}
}

signed main(){
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n >> k;
	for(int i=1; i<=n; i++){
		cin >> d[i];
		for(int j=1; j<=d[i]; j++){
			int x; cin >> x; x++;
			adj[i].insert(x);
		}
		pq.push(i);
	}
	while(!pq.empty()){
		int nw = pq.top(); pq.pop();
		solve(nw);
	}

	cout << ans << '\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...