首页 > 游游的二进制树
头像 wsjdoudou
发表于 2026-01-27 11:09:46
这道题虽然代码量不大,但考察的基础知识点非常扎实,是典型的图论搜索 + 基础数论结合的题目。 以下是这道题的 5 个核心考点总结: 1. 图的存储(邻接表) 考点:如何用 C++ 的 STL 存储一棵树(无向图)。 要点:使用 vector<int> g[N]。 注意区分 vector 展开全文
头像 pandaC222
发表于 2026-01-27 02:48:57
注意到,本题用dfs解决,但是要防止溢出,所以写法很关键(不然应该会18/20,别问我咋知道的)代码如下: #include<bits/stdc++.h> #include <functional> #include <vector> using namespac 展开全文
头像 Xuan2333
发表于 2026-01-27 09:58:22
本题中,很重要的剪枝思想就是如果此时的值已经大于r了,那么接下来再深搜就已经没有必要了此外就是关于下一个边的值的计算方法nv = (val << 1) | w[v];是二进制的运算方式,意思是对上一个的val乘2后加上当前的值的大小 #include <bits/stdc++.h& 展开全文
头像 YunBaichuan
发表于 2026-01-27 10:20:01
思路:题目说了n的范围较小,所以说可以用回溯来找到所有可能的路径并进行统计。首先我们可以做一个剪枝,如果当前的值已经>r了,就直接结束。然后还需要注意题目说了路径长度不能为1,因此要用一个depth变量来记录下长度 接下来就可以正常写回溯了,不过在统计答案的时候需要注意下,当前值处于l和r之间 展开全文
头像 以诚丶
发表于 2025-07-18 18:26:51
数据范围很小,我们可以枚举每一个点作为根节点,然后通过遍历,即可计算当前根节点到其他所有节点的二进制值即可。 对于根节点到孩子节点的值大小,可以通过实现更新,其中是节点的权值。 注意点: 对于无向图形式的树遍历,需要记录转移来源,也就是父亲节点是谁,这样子节点才不会走回头路。 import sy 展开全文
头像 chenlan114
发表于 2026-01-27 20:15:46
#include<bits/stdc++.h> using namespace std; using ll=long long; const ll N=1e3+5; string s; // 存储每个节点的二进制位(0/1) vector<vector<ll 展开全文
头像 Yuaeb_698
发表于 2026-01-27 00:20:56
注意到n<=1e3,对于一个无根树,令每一个点为根,然后分别做搜索(我采用BFS)。复杂度O(n^2)很合理。然后做BFS搜索,把当前结点与当前值扔到队列里面。如果访问到点为1,乘2加1(<<1|1);如果访问到点为0,乘2(<<1).但是交了一发竟然没过,哦!原来溢出 展开全文
头像 此在Dasein
发表于 2026-01-27 01:02:06
枚举起点 + 带剪枝的 DFS 鉴于 较小,最直接且稳健的算法是:枚举树上的每一个节点作为路径起点,通过深度优先搜索(DFS)向外延伸,寻找所有合法的终点。 全源遍历 (All-Source Traversal) + 状态传递 由于二进制数的计算依赖于节点的访问顺序(),从某个起点出发向叶子方向延 展开全文
头像 BeauWill
发表于 2026-01-27 08:54:03
#include <iostream> #include <vector> #include <string> #include <functional> using i64 = long long; int main() { std::ios 展开全文
头像 腌萝卜干
发表于 2026-01-27 11:01:52
分析 注意到数据范围不大 点的数量是, 边的数量也是 可以用解决 每个点作为根查找一下路径 发现满足条件累计答案 算法时间复杂度可以通过 代码实现 #include <bits/stdc++.h> #define x first #define y second using na 展开全文

等你来战

查看全部