Submission #1123441

#TimeUsernameProblemLanguageResultExecution timeMemory
1123441PiokemonHiperkocka (COCI21_hiperkocka)C++20
110 / 110
824 ms74780 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

vector<pair<int,int>> graf[20];
map<pair<int,int>,bool> jest;
int wart[20];

void dfs (int v, int p){
    for (pair<int,int> x:graf[v]){
        if (x.first!=p){
            wart[x.first]=  wart[v] ^ (1<<x.second);
            dfs(x.first,v);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,a,b;
    cin >> n;
    for (int x=1;x<=n;x++){
        cin >> a >> b;
        graf[a].push_back({b,x-1});
        graf[b].push_back({a,x-1});
    }
    dfs(0,-1);
    for (int x=0;x<(1<<n);x++){
        for (int y=0;y<n;y++){
            jest[{x,x^(1<<y)}]=1;
        }
    }
    vector<vector<int>> wyniki;
    for (int x=0;x<(1<<n);x++){
        bool git=1;
        for (int y=0;y<n;y++){
            for (pair<int,int> z:graf[y]){
                a = wart[y] ^ x; b = wart[z.first]^x;
                if (!jest[{a,b}])git=0;
            }
        }
        if (git){
            vector<int> empt;
            wyniki.push_back(empt);
            for (int y=0;y<n;y++){
                wyniki.back().push_back(wart[y]^x);
                for (pair<int,int> z:graf[y]){
                    a = wart[y] ^ x; b = wart[z.first]^x;
                    jest[{a,b}]=0;
                    jest[{b,a}]=0;
                }
            }
            wyniki.back().push_back(wart[n]^x);
        }
    }
    cout << wyniki.size() << '\n';
    for (int x=0;x<wyniki.size();x++){
        for (int y:wyniki[x]) cout << y << ' ';
        cout << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...