CF1867F Most Different Tree 记录
题目链接:https://codeforces.com/contest/1867/problem/F
题意简述
记
题解(官解)
这题的解法有一点构造的元素。给出下面的命题:
找到大小最小的(记为
下面证明这是最优解。对任何一个最优解
因此,问题的关键就在于找到树
所有大小为
代码实现(C++)
#include <bits/stdc++.h> using namespace std; using i64 = int64_t; using u64 = uint64_t; static uint64_t splitmix64(uint64_t x) { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return FIXED_RANDOM ^ x ^ (x >> 31); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; set<u64> vis; vector<pair<int, int>> e; { vector<vector<int>> adj(n + 1); for (int ei = 1; ei < n; ei++) { int u, v; cin >> u >> v; e.push_back({u, v}); adj[u].push_back(v); adj[v].push_back(u); } function<u64(int, int)> dfs = [&](int u, int fa) { u64 h = 1; for (int v : adj[u]) { if (v != fa) { h += splitmix64(dfs(v, u)); } } vis.insert(h); return h; }; dfs(1, -1); } vector<vector<int>> sons(0); vector<u64> h(0); vector<vector<int>> sz_root(16); int cnt = 0; auto print_ans = [&](int sz, int u) { vector<int> mp(cnt); for (int i = 1; i <= n - sz; i++) { cout << i << " " << i + 1 << "\n"; } int t = n - sz; function<void(int)> dfs = [&](int u) { mp[u] = ++t; for (int v : sons[u]) { dfs(v); cout << mp[u] << " " << mp[v] << "\n"; } }; dfs(u); exit(0); }; for (int sz = 1; sz <= n; sz++) { vector<int> tmpsons; function<void(int, int, u64)> dfs = [&](int now_sz, int min_add_sz, u64 now_hash) { if (now_sz == sz) { sz_root[sz].push_back(cnt); cnt++; sons.push_back(tmpsons); h.push_back(now_hash); if (!vis.contains(now_hash)) { print_ans(sz, cnt - 1); } return; } else if (now_sz > sz) return; for (int add_sz = min_add_sz; add_sz + now_sz <= sz; add_sz++) { for (int v : sz_root[add_sz]) { tmpsons.push_back(v); dfs(now_sz + add_sz, add_sz, now_hash + splitmix64(h[v])); tmpsons.pop_back(); } } }; dfs(1, 1, 1); } for (auto [u, v] : e) cout << u << " " << v << "\n"; }
分类:
做题记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】