# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
135666 | miguel | Political Development (BOI17_politicaldevelopment) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define rc(x) return cout<<x<<endl,0
#define pb push_back
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define sz size()
#define x first
#define y second
#define pi pair <int, int>
#define pii pair <int, pi>
#define vi vector <int>
#define nmax 301
const ll mod = 998244353;
int n, m, k, viz[50001], deg[50001], ans;
vi g[50001];
set <pi> edg;
priority_queue<pi, vector<pi>, greater<pi>> pq;
int32_t main(){
ios_base :: sync_with_stdio(0); cin.tie(); cout.tie();
//cin>>n;for(int i=1; i<=n; i++){int x; cin>>x; pq.push(x);};while(!pq.empty()){int x=pq.top(); pq.pop(); cout<<x<<" ";}
cin>>n>>k;
for(int i=0; i<n; i++){
cin>>deg[i];
pq.push({deg[i], i});
for(int j=1; j<=deg[i]; j++){
int x;
cin>>x;
g[i].pb(x);
edg.insert({i, x});
}
}
//for(pi i: edg){ cout<<i.x<<" "<<i.y<<"\n";}
//cout<<"\n";
while(true){
//cout<<"xd"<<endl;
while(!pq.empty() && viz[pq.top().x]) pq.pop();
if(pq.empty()) break;
int a=pq.top().y, d=pq.top().x;
pq.pop();
deg[a]=0;
viz[a]=1;
vi v;
v.pb(a);
for(int i : g[a]){
if(!viz[i]){
deg[i]--;
pq.push({deg[i], i});
v.pb(i);
}
}
//for(int i : v) cout<<i<<" "; cout<<endl;
bool adj[11][11];
for(int i=0; i<v.size(); i++){
//a[i][j]=0;
for(int j=0; j<v.size(); j++){
if(i!=j && edg.find({v[i], v[j]})!=edg.end()){
adj[i][j]=1;
}
else a[i][j]=0;
}
}
for(int mask=1; mask<(1<<v.size()); mask+=2){
bool ctrl=1;
int cnt=0;
for(int i=0; i<v.size(); i++){
if((mask>>i)%2==0) continue;
cnt++;
for(int j=0; j<v.size(); j++){
if((mask>>j)%2==0) continue;
if(i!=j && adj[i][j]==0) ctrl=0;
}
}
if(ctrl) ans=max(ans, cnt);
}
}
cout<<ans<<endl;
}