[Mdfs] lc3067. 在带权树网络中统计可连接服务器对数目(邻接表+图操作基础+技巧+好题)

news2024/10/6 18:35:28

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:3067. 在带权树网络中统计可连接服务器对数目

2. 题目解析

挺有意思的一道题目,重点是要能够读懂题目,然后结合几个图相关的处理技巧即可拿下。

  • 图存储:邻接表即可。
  • 无向无环图的单侧图遍历:无向图一般邻接表建立两条边,正常图遍历会有重复边。一般的处理操作就是遍历时记录一个 fa 父节点即可,即不会往父节点方向遍历,则一直会向下遍历,最终结果无重复。
  • 结果处理:实际上就是每个节点作为根节点,作为服务器 C,查找子树中的所有与根节点距离能被整除的节点个数。这里计数需要使用到乘法原理,具体看下摘自灵神的这张图即可:
    在这里插入图片描述
  • 优化技巧:如果枚举的根,相邻点只有一个的话,那么结果一定是 0,因为要求 C 到 A、B 的边是不重复的。

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:
    vector<int> countPairsOfConnectableServers(vector<vector<int>>& edges, int signalSpeed) {
        int n = edges.size() + 1;
        vector<vector<pair<int, int>>> g(n);

        for (auto &e : edges) {
            int x = e[0], y = e[1], w = e[2];
            g[x].push_back({y, w});
            g[y].push_back({x, w});
        }

        vector<int> ans(n);
        for (int i = 0; i < n; i ++ ) {
            // 如果只有一个相邻点,则结果为 0。因为该点不能作为 C 点,题目要求没有与 a、b 的公共边
            if (g[i].size() == 1) {
                continue;
            }

            int sum = 0;
            for (auto &[y, wt] : g[i]) {    // 递归遍历子树
                int cnt = dfs(y, i , wt, signalSpeed, g);
                ans[i] += cnt * sum;
                sum += cnt;
            }
        }

        return ans;
    }

    // dfs 统计子树中有多少节点可以被整除
    int dfs(int x, int fa, int sum, int signalSpeed, vector<vector<pair<int ,int >>> g) {
        int cnt = sum % signalSpeed == 0;
        for (auto &[y, wt] : g[x]) {
            if (y != fa) {      // 不等于父节点,只计算单边树
                cnt += dfs(y, x, sum + wt, signalSpeed, g);
            }
        }

        return cnt;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1807019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】什么是Redis缓存 雪崩、穿透、击穿?(一篇文章就够了)

目录 什么是Redis? Redis的正常存储流程&#xff1f; 什么是Redis缓存雪崩&#xff1f; 缓存雪崩 缓存预热 缓存失效时间的随机性 什么是Redis缓存穿透&#xff1f; 缓存穿透 缓存空对象 BloomFilter&#xff08;布隆过滤器&#xff09; 什么是Redis缓存击穿&#…

LabVIEW 用于 MES 系统和卡钳上位机检测

LabVIEW 确实可以用于制造执行系统&#xff08;MES&#xff09;的开发以及卡钳上位机检测。以下是详细说明&#xff1a; 使用 LabVIEW 开发 MES 系统 数据采集与处理&#xff1a;LabVIEW 擅长实时数据采集和处理&#xff0c;可以连接多种传感器和设备&#xff0c;获取生产线上…

Spark作业运行异常慢的问题定位和分析思路

一直很慢 &#x1f422; 运行中状态、卡住了&#xff0c;可以从以下两种方式入手&#xff1a; 如果 Spark UI 上&#xff0c;有正在运行的 Job/Stage/Task&#xff0c;看 Executor 相关信息就好。&#x1f4bb; 第一步&#xff0c;如果发现卡住了&#xff0c;直接找到对应的…

YoloV9改进策略:主干网络篇|MobileNetV4主干替换YoloV9的BackBone(独家原创)

摘要 今年&#xff0c;轻量级王者MobileNetV4闪亮登场&#xff01;在我们这篇文章里&#xff0c;我们把MobileNetV4加入到了YoloV9中&#xff0c;对MobileNetV4的层数和卷积层核做了适当的修改&#xff0c;然后替换原有的BackBone。哈哈&#xff0c;你猜怎么着&#xff1f;效果…

整除及求余运算符、数字的提取、顺序结构程序

1.运算符 在有余数的除法运算中&#xff0c;如果要知道商和余数分别是多少&#xff0c;可以用/和%这两个运算符号来得到。 (1)/(整除)&#xff0c;当被除数和除数均为整数时&#xff0c;结果也为整型&#xff0c;只取商的整数部分。 如:10/25 10/33 5/10 0 (2)%(求余)&…

2024年最详细的Studio One 6.6.1中文破解版图文安装激活指南(附Keygen下载)

Studio One 6是一款非常专业的音乐创作编辑软件。为用户提供了所有一切你所需要创作的功能&#xff0c;包括所有的歌曲、项目、仪表板等动能&#xff0c;而且还自定义添加配置文件&#xff0c;良好的界面交互和丰富的功能板块&#xff0c;再结合优秀的性能&#xff0c;能够满足…

苹果跌穿4500元,反噬国产手机,这算是自作自受吧!

618大促还在进行中&#xff0c;苹果仍然在降价&#xff0c;iPhone15已是618大促最畅销的手机&#xff0c;国产手机没有谁能超越它了&#xff0c;或许是国产手机眼见着已无法击败苹果&#xff0c;选择涨价&#xff0c;能卖一部算一部&#xff0c;多赚一点钱了吧。 苹果的iPhone1…

工业互联网数字中台建设方案(ppt原件)

工业互联网数字中台解决方案旨在为企业提供全面、高效的数据驱动能力。该方案主要包括以下几个核心部分&#xff1a; 数据中台&#xff1a;作为核心&#xff0c;数据中台负责汇聚、整合、提纯和加工各类工业数据&#xff0c;实现数据资产的标准化、模型化和模块化。通过提供API…

【Oracle】Oracle导入导出dmp文件

文章目录 前言一、什么是dmp&#xff1f;二、imp/impdp、exp/expdp对比及示例1.区别2.imp/impdp对比及示例a. impb. impbp 3.exp/expdp对比及示例a. expb.expdp 3.其他事项 三、执行导入导出前置条件1.创建角色并授权2.创建目录映射 前言 在工作中&#xff0c;经常会遇到需要备…

基于关键词自动采集抖音视频排名及互动数据(点赞、评论、收藏)

在当今的社交媒体时代&#xff0c;抖音作为一个热门短视频平台&#xff0c;吸引了大量用户和内容创作者。对于研究和分析抖音上的热门视频及其互动数据&#xff08;如点赞、评论、收藏等&#xff09;&#xff0c;自动化的数据采集工具显得尤为重要。本项目旨在开发一个基于关键…

Linux基础I/O

一&#xff0c;系统文件I/O 写文件: #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> int main() {umask(0);int fd open("myfile", O_WRO…

【Java】解决Java报错:StackOverflowError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 无限递归2.2 递归深度过大2.3 方法调用层次过深 3. 解决方案3.1 优化递归算法3.2 尾递归优化3.3 增加调用栈大小3.4 检查递归终止条件 4. 预防措施4.1 使用迭代替代递归4.2 尾递归优化4.3 合理设计递归算法4.4 调整JVM参数4.5 定…

【Qt】Qt QTreeWidget隐藏列名称(横向表头)

1. 效果 未隐藏 隐藏 2. 方法 方法1 ui->treeWidget->header()->hide();方法2 ui->treeWidget->header()->setVisible(false);

RDK X3(aarch64) 测试手柄

0. 环境 - 亚博智能的ROSMASTER-X3 标准版 - XDK X3 1.0 - 冰原狼等win10免驱的手柄 1. RDK X3 1.0 串口通信 波特率 921600 root/root mobaterm -> Session -> VNC -> 192.168.8.108:5900 -> runrise 2. 测试 ROSMASTER-X3 标准版 配套的手柄 安装 …

【Java SE】字符串常量池详解,什么情况下字符串String对象存在常量池,通过==进行判断,字符串创建及截取后是否同一个对象

复习字符串创建方式 字符串的31种构造方法 public String();创建一个空白字符串&#xff0c; 不含有任何内容public String(char[] array);根据字符数组的内容&#xff0c;来创建对应的字符串public String(byte[] array);根据字节数组的内筒&#xff0c;来创建对应的字符串 …

物联网设计竞赛_8_Jetson Orin Nano安装pytorch与torchvision

我的新板子到了&#xff0c;型号是jetson orin Nano与之前的jetson nano稍有不同我发现库又得从新下载 我的pip3的版本是3.8.10&#xff0c;jetpack版本5.1.1&#xff0c;又得重新开始下载库&#x1f62d; 安装pytorch: 得科学上网&#xff1a; PyTorch for Jetson - Jetson …

U-Net: Convolutional Networks for Biomedical Image Segmentation--论文笔记

U-Net: Convolutional Networks for Biomedical Image Segmentation 资料 1.代码地址 2.论文地址 https://arxiv.org/pdf/1505.04597 3.数据集地址 论文摘要的翻译 人们普遍认为&#xff0c;深度网络的成功训练需要数千个带注释的训练样本。在本文中&#xff0c;我们提出…

nodejs最新某东h5st(4.7.2)参数分析与javascript逆向纯算法还原(含算法源码)(2024-06-09)

一、作者声明&#xff1a; 文章仅供学习交流与参考&#xff01;严禁用于任何商业与非法用途&#xff01;否则由此产生的一切后果均与作者无关&#xff01;如有侵权&#xff0c;请联系作者本人进行删除&#xff01; 二 、写在前面 h5st从4.1一路更新到4.7.2&#xff0c;逐渐vmp…

57.Semaphore信号量

用来限制能同时访问共享资源的线程上限。只是适合限制单机线程数量。 Slf4j public class SemaphoreDemo {public static void main(String[] args) {Semaphore semaphore new Semaphore(3);for (int i 0; i < 10; i) {new Thread(() -> {try {semaphore.acquire();//…

Spring配置多数据库(采用数据连接池管理)

一&#xff0c;前言 大家在开发过程中&#xff0c;如果项目大一点就会遇到一种情况&#xff0c;同一个项目中可能会用到很多个数据源&#xff0c;那么这篇文章&#xff0c;博主为大家分享在spring应用中如何采用数据库连接池的方式配置配置多数据源。 本篇文章采用大家用的最…