
树及衍生物
会飞的蟋蟀
学习中!!
展开
-
luogu P1020 导弹拦截
题解这是一道需要加深理解才能ac的题目。 第一问 就是求最长非递减序列(倒序)的长度,用dp解很容易但是只有O(n),要优化到O(log n)需要一点高级的数据结构帮忙。 第二问 想了很久 发现用naive的屡次去除最长序列的方法失败。看了下大佬的解答, 发现了一个全新的定理 DilworthDilworthDilworth定理。这是一个离散数学里的知识点。 大意是讲 在一个偏序集合中...原创 2018-08-10 16:58:25 · 193 阅读 · 0 评论 -
USACO 2.3.2 奶牛家谱 Cow Pedigrees
题解这道题你想模拟建树的方法来做是肯定行不通的,有高度有节点数,两种限制,有点背包的意思。 F [ i , j ] 代表有 j 个节点 i 层的树 的表示数量 显然每棵树都可分为根节点和左右两子树,我们只需让左右子树的最高高度为 i-1 以及其节点和为 j-1 就好了。 这样的情况只有三种: 1. 左右子树高度均为 i - 1 2. 左子树高度为 i - 1 , 右子树高度小于 i...原创 2018-08-30 17:23:05 · 312 阅读 · 0 评论 -
USACO 3.1.1 最短网络 Agri-Net 【模版】
题解最小生成树裸题。Kruskal方法解答,用并查集对节点检查合并。代码很简练。Code// head files excludedusing namespace std;int n,m,k;struct edge{ int x,y,v;} cot[20000];int f[200];bool cmp(edge &a, edge &b){...原创 2018-09-10 15:01:22 · 272 阅读 · 0 评论 -
LeetCode 96. Unique Binary Search Trees
题解这是一道很有意思的dp题目,值得玩味。给出一个写的很好的英文题解。解释得非常清楚。点几个要点:以不同序号标记去重,形成1-(i-1) – i – (i+1)-N的树形。G(N), F(i , N)的表示意思及联系。为什么 F(i , N) = G(i-1) * G(N-i)。Codeclass Solution {public: int dp[200]; // ...原创 2018-09-27 11:07:18 · 107 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree
题解求解最近公共父节点,比较经典的题目。思路是二路dfs。沿着左右下行,终结条件是 空节点 或者 root==(p or q)。那么此时,Left Right 有三种情况均非空:左右两子树刚好各有一个目标节点,此时root就是父节点。一空一非空:空端子树没有目标节点,非空一端子树为父节点。双空:舍弃。为什么这样可行,因为递归作用下,但凡返回的是非空那么该子树必然至少含有一个目标节...原创 2018-10-05 10:47:55 · 112 阅读 · 0 评论 -
luogu P1955 [NOI2015]程序自动分析
题解并查集+离散化。这题并查集使用起来有个小trick,就是先把e=1的先合并再考虑e=0的,这样可以回避掉因为顺序不一导致的又合又分的情况。第一次碰见离散化。大意是把大范围数转化为小范围的数,转化方法是根据其在原数组内的相对位置。例如{ 9783, 123 , 31342432, 231324 }->{ 123, 9783, 231324, 31342432 }->...原创 2018-10-17 11:54:10 · 121 阅读 · 0 评论 -
LeetCode 572. Subtree of Another Tree
题解题很简单但要写得简洁优雅也不容易。给出的代码递归写得非常漂亮。Codebool isSubtree(TreeNode* s, TreeNode* t) { if(!s) return false; if(isSame(s,t)) return true; // 点睛之笔 return isSubtree(s->le...原创 2018-11-02 11:35:35 · 359 阅读 · 0 评论