首页 > 小红的树
头像 文和906
发表于 2021-11-04 16:29:30
开始时考虑的是暴力解法。构建树的过程就不说了。这里有一点需要注意,题目中的树并非二叉树,只是一个无环连通图,所以树节点中只能设定保存父节点的指针。在每次统计节点x的子节点中红色节点的个数时,使用一个辅助队列,开始时将x结点入队。进入循环后,查看队头结点是否为红色,然后遍历整棵树的所有结点,当遇到父节 展开全文
头像 摸鱼学大师
发表于 2021-10-27 22:01:30
题目的主要信息: 没有回路的无向连通图,可以看成树,根结点为1 其中一部分结点染成了红色 之后有qqq次询问,每次询问以该结点作为根的子树有多少红色结点 具体做法: 根据输入的父节点,构建树的邻接表。 然后用字符串记录输入的染色信息,再通过dfs构建,对树进行染色,构建dp数组。其中dp[i]d 展开全文
头像 重生之我要当分子
发表于 2024-12-24 23:37:50
解题思路 核心思想: 使用DFS预处理每个节点的子树中红色节点数量 对于每次查询直接返回预处理的结果 实现步骤: 根据父节点数组构建树(邻接表) DFS遍历树,统计每个节点子树中的红色节点数 处理查询 代码 cpp java python #include &l 展开全文
头像 吱吱1111111
发表于 2024-04-26 14:05:20
题目的输入用的节点,目标是遍历节点,所以链表用邻接表(拉链表)存储带缓存的递归循环法性能差别还蛮明显的 #include <iostream> #include <vector> #include <deque> using namespace std; int 展开全文
头像 牛客963150786号
发表于 2021-12-24 12:40:25
dp[i]:以第i个节点为根节点的子树的染色个数。 tree[i]:为第i个节点的父亲节点。 先获取树,然后为需要染色的节点赋值dp[i]=1,最后从第n个节点依次往前逐次把dp[i]增加到dp[tree[i]]上。 dp[tree[i]]+=dp[i]; #include<iostream& 展开全文
头像 ccy201911211837914
发表于 2022-03-08 16:43:02
# include <stdio.h> # include <string.h> # include <limits.h> int max(int a,int b){     return a>b?a:b; } int mai 展开全文
头像 帅气哥哥
发表于 2023-05-13 21:58:08
#include <iostream> using namespace std; struct ChildNode { int child; struct ChildNode *next; }; struct ParentNode { int i; 展开全文
头像 龍眠
发表于 2025-05-02 21:47:02
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = 展开全文
头像 脚拿开
发表于 2022-04-10 12:39:10
n = int(input()) parents = list(map(int, input().split())) # 树的表示 tree = [[] for _ in range(n+1)] for i, p in enumerate(parents): i = i + 2 tr 展开全文
头像 一个响亮的名字启动
发表于 2023-03-22 15:52:40
import sys from collections import defaultdict # 后序遍历(所谓树形DP) n = int(input()) sons = defaultdict(list) ps = list(map(int, input().split())) for i in 展开全文