Submission #874851

#TimeUsernameProblemLanguageResultExecution timeMemory
874851tsumondaiHiperkocka (COCI21_hiperkocka)C++14
110 / 110
45 ms36580 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pb push_back #define mp make_pair #define foru(i, l, r) for(int i = l; i <= r; i++) #define ford(i, r, l) for(int i = r; i >= l; i--) #define __TIME (1.0 * clock() / CLOCKS_PER_SEC) typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 1e6 + 5; const int oo = 1e18, mod = 1e9 + 7; int n, m, k; string s; vector<int> edges[N]; void process() { cin >> n; foru(i,1,n) { int u, v; cin >> u >> v; edges[u].pb(v); edges[v].pb(u); } vector<int> ord(n+5, -1), p(n+5); int t=0; queue<int> Q({0}); ord[0]=t++; while (!Q.empty()) { int x=Q.front(); Q.pop(); for (int y: edges[x]) { if (ord[y]!=-1) continue; ord[y]=t++; p[ord[y]]=ord[x]; Q.push(y); } } vector<vector<int>> sol= {{0,1}}; foru(i,1,n-1) { int k=sol.size(); foru(j,0,k-1) { sol.pb(sol[j]); for (auto &x: sol.back()) { x^=1^(1<<i); } } for (auto &v: sol) { v.pb(v[p[i+1]] ^ (1<<i)); } } cout << sol.size() << '\n'; for (auto &v: sol) { foru(i,0,n) { cout << v[ord[i]] << ' '; } cout << '\n'; } return; } signed main() { cin.tie(0)->sync_with_stdio(false); //freopen(".inp", "r", stdin); //freopen(".out", "w", stdout); process(); cerr << "Time elapsed: " << __TIME << " s.\n"; return 0; } /* Xét các trường hợp đặc biệt Kiểm tra lại input/output Cố gắng trâu Lật ngược bài toán Calm down and get VOI Flow: trong một hình q(n) có 2^(n-1) bản sao của cây T với n node bao quanh nói cách khác, hình q(n) là đồ thị gồm 2^n node được đánh dấu từ 0 đến n-1 và node x và node y chỉ được kết nối nếu xor của chúng là số mũ 2 một cây được phép đặt vào nếu node của cây đại diện cho một số node nào đó trong hcn các nod phải khác nhau nếu có cạnh giữua chúng thì phải có cạnh giữa các node trong hyper địt con mẹ adhoc */
#Verdict Execution timeMemoryGrader output
Fetching results...