답안 #529653

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
529653 2022-02-23T10:01:58 Z topovik Hiperkocka (COCI21_hiperkocka) C++14
1.17023 / 110
182 ms 39544 KB
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second

using namespace std;

typedef long long ll;
typedef long double ld;

const ll oo = 1e18 + 7;

const int N = 5e5 + 10;
const int M = 1000;
const int M1 = 1e6;

int n;
map <int, bool> mrk[N];
vector <int> a[N];
vector <int> ans;
vector <vector <int> > ans1;
vector <pair<int, int> > vc;
bool g = 1;

bool check(int x)
{
    for (int i = 0; i < n; i++)
        if (x == (1 << i)) return 1;
    return 0;
}

void Rec(int x, int y, int prv)
{
    ans1.back()[y] = x;
    for (auto i : a[y])
        if (i != prv)
    {
        int j;
        for (j = 0; j < (1 << n); (j == 0 ? j++ : j <<= 1))
            if (!mrk[min(x, j ^ x)][max(j ^ x, x)] && (j ^ x) != x)
        {
            mrk[min(x, j ^ x)][max(j ^ x, x)] = 1;
            vc.pb({min(x, j ^ x), max(j ^ x, x)});
            Rec(j ^ x, i, y);
            break;
        }
        g &= (j != (1 << n));
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    iostream::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    srand(time(NULL));
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        a[x].pb(y);
        a[y].pb(x);
    }
    while (1)
    {
        bool g1 = 0;
        for (int i = 0; i <= n; i++)
        {
            ans1.pb({});
            ans1.back().resize(n + 1);
            vc.clear();
            g = 1;
            Rec(i, 0, 0);
            if (g)
            {
                g1 = 1;
                break;
            }
            ans1.pop_back();
            for (auto j : vc) mrk[j.f][j.s] = 0;
        }
        if (!g1) break;
    }

    int k = ans1.size();
    for (int x = 0; x < min((1 << n), M); x++)
    {
        for (int ps = 0; ps < k; ps++)
        {
            bool g = 1;
            for (int i = 0; i <= n; i++)
                for (auto j : a[i]) g &= !mrk[min(ans1[ps][i] ^ x, ans1[ps][j] ^ x)][max(ans1[ps][i] ^ x, ans1[ps][j] ^ x)];
            if (g)
            {
                ans1.pb(ans1[ps]);
                for (int i = 0; i <= n; i++) ans1.back()[i] ^= x;
                for (int i = 0; i <= n; i++)
                    for (auto j : a[i]) mrk[min(ans1.back()[i], ans1.back()[j])][max(ans1.back()[i], ans1.back()[j])] = 1;
            }
        }
    }
    cout << ans1.size() << endl;
    for (auto i : ans1)
    {
        for (auto j : i) cout << j << " ";
        cout << endl;
    }
}
/*
5 3
2 1 1 2 2 3
2 3 3 4 4 5
4 1 1 2 2 3 3 4 4 5
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35532 KB Output is correct
2 Partially correct 17 ms 35540 KB Output is partially correct
3 Partially correct 17 ms 35460 KB Output is partially correct
4 Partially correct 17 ms 35436 KB Output is partially correct
5 Partially correct 18 ms 35564 KB Output is partially correct
6 Partially correct 21 ms 35532 KB Output is partially correct
7 Partially correct 29 ms 35708 KB Output is partially correct
8 Partially correct 49 ms 35768 KB Output is partially correct
9 Partially correct 100 ms 37156 KB Output is partially correct
10 Partially correct 64 ms 36540 KB Output is partially correct
11 Partially correct 115 ms 36948 KB Output is partially correct
12 Partially correct 118 ms 37112 KB Output is partially correct
13 Partially correct 50 ms 35912 KB Output is partially correct
14 Partially correct 162 ms 37600 KB Output is partially correct
15 Partially correct 28 ms 36044 KB Output is partially correct
16 Partially correct 109 ms 36888 KB Output is partially correct
17 Partially correct 59 ms 36980 KB Output is partially correct
18 Partially correct 102 ms 37052 KB Output is partially correct
19 Partially correct 89 ms 39544 KB Output is partially correct
20 Partially correct 92 ms 39204 KB Output is partially correct
21 Partially correct 35 ms 35776 KB Output is partially correct
22 Partially correct 74 ms 36952 KB Output is partially correct
23 Partially correct 79 ms 37124 KB Output is partially correct
24 Partially correct 174 ms 37688 KB Output is partially correct
25 Partially correct 182 ms 38400 KB Output is partially correct
26 Partially correct 84 ms 36876 KB Output is partially correct