树链剖分 前置芝士 ? 就像它的名字,树链剖分是在一棵树上进行,在讲解中还会用到线段树和dfs,如果不会,打开链接自行搜索(主要是线段树的博客没做,还有不要问我为什么这算知识)。 一个节点的重儿子,为其更大的一颗子树的根节点。从这个点连向重儿子的边我们称为重边。 由重边连续连起来的点和边就组成了重链 ...
分类:
其他好文 时间:
2020-07-19 18:00:12
阅读次数:
56
跑ac自动机后使用fail树建立dfs序后跑树状数组维护答案 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; struct node{ int cnt; node * nxt ...
分类:
其他好文 时间:
2020-07-19 00:37:01
阅读次数:
84
方法一: 动态规划 class Solution { public boolean isInterleave(String s1, String s2, String s3) { int n1 = s1.length(), n2 = s2.length(), n3 = s3.length(); if ...
分类:
其他好文 时间:
2020-07-18 22:15:59
阅读次数:
61
一、技术总结 关于最短路径的问题,可以将问题化简,为两个部分,一个是单独使用Dijkstra求最短路径,然后再使用DFS进行第二判定条件再选出合适的路径; 其中推荐使用邻接表来存储图的信息,至于其他边权可以使用二维数组进行存储,如果点权直接使用结构体进行存储信息; 如果有多个判定条件,应该分别使用D ...
分类:
其他好文 时间:
2020-07-18 13:40:01
阅读次数:
55
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo ...
分类:
其他好文 时间:
2020-07-18 13:39:30
阅读次数:
56
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714。 还可以表示为:100 = 82 + 3546 / 197。 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100 有 11 种表示法。 输入格式 从标准输入读入一个正整数N ...
分类:
其他好文 时间:
2020-07-18 00:50:48
阅读次数:
68
题目链接 题目大意:给出一颗含有$n$个结点的树,每个节点有一个颜色。求树中每个子树最多的颜色的编号和。 树上启发式合并(dsu on tree)。 我们先考虑暴力怎么做。遍历整颗树,暴力枚举子树然后用桶维护颜色个数。这样做是$O(n^2)$的,显然会T。我们需要一种更快的算法:树上启发式合并。 关 ...
分类:
其他好文 时间:
2020-07-17 22:21:39
阅读次数:
58
下面我就来详细讲解一下关于树剖的一些重点,其实树剖的主要就是轻重链的判断,这一点我默认大家都懂,所以我就直接从两个dfs那里开始说。 dfs1 第一个dfs主要是处理一下基本的一些信息,就是我们更新每一个点的爸爸,处理一下他们当前的深度,然后更新他们的子树大小,然后我们再从他们的儿子中找到重儿子。具 ...
分类:
其他好文 时间:
2020-07-17 16:19:08
阅读次数:
54
BFS 解法: private final void addRow(Stack<TreeNode> stack, int v) { while (!stack.empty()) { TreeNode node = stack.pop(); TreeNode newNodeLeft = new Tre ...
分类:
其他好文 时间:
2020-07-17 13:49:00
阅读次数:
51
本题考察的是回溯算法,可以使用DFS解决问题。 C++版本 #include <iostream> #include <vector> using namespace std; int getDigitSum(int num){ int sum = 0; while(num > 0){ sum += ...
分类:
其他好文 时间:
2020-07-17 11:28:13
阅读次数:
48