Submission #496635

#TimeUsernameProblemLanguageResultExecution timeMemory
496635JovanBHiperkocka (COCI21_hiperkocka)C++17
110 / 110
56 ms5964 KiB
#include <bits/stdc++.h>
using namespace std;

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

const int N = 17;

int gde[(1<<N)][N+1];

vector <int> ord, parent;
vector <int> graf[N+1];

void dfs(int v, int p){
    ord.push_back(v);
    parent.push_back(p);
    for(auto c : graf[v]){
        if(c != p) dfs(c, v);
    }
}

bool taken[(1<<N)];

vector <int> vc;

void dupliraj(int n, int v, int p){
    vc.push_back(v);
    for(int i=0; i<n; i++){
        gde[i][v] = gde[i][p] + 2*n;
        taken[gde[i][v]] = 1;
    }
    int k = 2*n;
    for(int i=0; i<n; i++){
        while(taken[k]) k++;
        int xr = k^gde[i][p];
        for(int j=0; j<vc.size(); j++){
            gde[i + n][vc[j]] = gde[i][vc[j]] ^ xr;
        }
        taken[k] = 1;
    }
}

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

    int n;
    cin >> n;
    for(int i=1; i<=n; i++){
        int a, b;
        cin >> a >> b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }
    dfs(0, -1);
    reverse(ord.begin(), ord.end());
    reverse(parent.begin(), parent.end());
    ord.pop_back();
    parent.pop_back();
    gde[0][0] = 0;
    gde[0][ord.back()] = 1;
    vc.push_back(0);
    vc.push_back(ord.back());
    ord.pop_back();
    parent.pop_back();
    int tren = 1;
    while(ord.size()){
        dupliraj(tren, ord.back(), parent.back());
        tren *= 2;
        ord.pop_back();
        parent.pop_back();
    }
    cout << (1<<(n-1)) << "\n";
    for(int i=0; i<(1<<(n-1)); i++){
        for(int j=0; j<=n; j++){
            cout << gde[i][j] << " ";
        }
        cout << "\n";
    }
    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'void dupliraj(int, int, int)':
Main.cpp:36:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |         for(int j=0; j<vc.size(); j++){
      |                      ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...