Submission #467902

#TimeUsernameProblemLanguageResultExecution timeMemory
467902JovanBPolitical Development (BOI17_politicaldevelopment)C++17
100 / 100
307 ms28556 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;

const int N = 50000;

set <int> graf[N+5];

bool ima[15][15];
bool moze[(1<<15)];

int main(){
    ios_base::sync_with_stdio(false), cin.tie(0);
    cout.precision(10);
    cout << fixed;

    int n, k;
    cin >> n >> k;
    priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> q;
    for(int i=1; i<=n; i++){
        int x;
        cin >> x;
        for(int j=1; j<=x; j++){
            int y;
            cin >> y;
            y++;
            graf[i].insert(y);
        }
        q.push({graf[i].size(), i});
    }
    int res = 1;
    while(!q.empty()){
        int v = q.top().second;
        int deg = q.top().first;
        q.pop();
        if(graf[v].size() != deg) continue;
        vector <int> vec;
        for(auto c : graf[v]) vec.push_back(c);
        for(int i=0; i<deg; i++){
            for(int j=i+1; j<deg; j++){
                ima[i][j] = ima[j][i] = 0;
                if(graf[vec[i]].find(vec[j]) != graf[vec[i]].end()) ima[i][j] = ima[j][i] = 1;
            }
        }
        for(int mask=1; mask<(1<<deg); mask++) moze[mask] = 0;
        moze[0] = 1;
        for(int mask=0; mask<(1<<deg); mask++){
            for(int j=0; j<deg; j++){
                if((1 << j) & mask){
                    int x = mask ^ (1 << j);
                    if(!moze[x]) break;
                    moze[mask] = 1;
                    for(int k=j+1; k<deg; k++) if((1 << k) & mask) moze[mask] &= ima[j][k];
                    break;
                }
            }
            if(moze[mask]) res = max(res, 1 + __builtin_popcount(mask));
        }
        for(auto c : graf[v]){
            graf[c].erase(v);
            q.push({graf[c].size(), c});
        }
        graf[v].clear();
    }
    cout << res << "\n";
    return 0;
}

Compilation message (stderr)

politicaldevelopment.cpp: In function 'int main()':
politicaldevelopment.cpp:38:27: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |         if(graf[v].size() != deg) continue;
      |            ~~~~~~~~~~~~~~~^~~~~~
#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...