Tree Reconstruction - codeforce
Posted zgglj-com
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tree Reconstruction - codeforce相关的知识,希望对你有一定的参考价值。
题解:构造策略,将最大值n当作根,其它出现的节点作为叶子节点,然后计算叶子节点出现了几次,则对应这条链上应该有几个节点。
int n; int use[1005]; P ans[1004]; int main() { cin >> n; vector<int> a; rep(i, 1, n) { int u, v; cin >> u >> v; if (!use[u]) a.pb(u); use[u]++; use[v]++; } sort(Range(a)); if (use[n] != n - 1) { puts("NO"); } else { int cnt = 0; bool flag = false; for (auto v : a) { int t = use[v] - 1, tt = 0, last = n; rep(i, 1, v) if (!use[i] && tt < t) { tt++; use[i] = 1; ans[++cnt] = P(last, i); last = i; } ans[++cnt] = P(last, v); if (tt != t) { flag = true; break; } } if (flag) { puts("NO"); } else { puts("YES"); rep(i, 1, n) cout << ans[i].first << " " << ans[i].second << endl; } } return 0; }
以上是关于Tree Reconstruction - codeforce的主要内容,如果未能解决你的问题,请参考以下文章
Tree Reconstruction - codeforce
UVA - 10410 Tree Reconstruction(栈处理递归)
codeforces 1041 E. Tree Reconstruction 和度数有关的构造树