图的DFS

news2024/11/13 9:44:30

LeetCode2368 受限条件下可到达节点的数目

class Solution {
public:
    int dfs(vector<vector<int>>& g,int x,int fa){
        int sum=1;
        for(int y:g[x]){
            if(y!=fa) sum+=dfs(g,y,x);
        }
        return sum;
    }
    int reachableNodes(int n, vector<vector<int>>& edges, vector<int>& restricted) {
        vector<vector<int>> g(n);
        unordered_set<int> s;
        for(int i=0;i<restricted.size();i++) s.insert(restricted[i]);
        for(int i=0;i<edges.size();i++){
            int x=edges[i][0],y=edges[i][1];
            if(!s.count(x)&&!s.count(y)){//两节点都不受限才建立边
                g[x].push_back(y);
                g[y].push_back(x);
            }
        }
        return dfs(g,0,-1);
    }
};

时间复杂度:O(n)

空间复杂度:O(n) 

LeetCode2477 到达首都的最少油耗(贡献法)

 

/*
 * @lc app=leetcode.cn id=2477 lang=cpp
 *
 * [2477] 到达首都的最少油耗
 */

// @lc code=start
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

class Solution {
public:
    long long res=0;
    int sum=0;
    int dfs(vector<vector<int>>& g,int x,int fa,int seats){
        int sum=1;
        for(int y:g[x]){
            if(y!=fa){ //递归子节点,不能递归父节点
                sum+=dfs(g,y,x,seats); //统计子树大小
            }
        }
        if(x!=0) //x不是根节点
            res+=(sum-1)/seats+1; //ceil(sum*1.0/seats); 
        return sum;
    }
    long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
        int n=roads.size()+1;
        vector<vector<int>> g(n);
        for(int i=0;i<roads.size();i++){
            int from=roads[i][0],to=roads[i][1];
            g[from].push_back(to);
            g[to].push_back(from);
        }
        dfs(g,0,-1,seats);
        return res;
    }
};

时间复杂度:O(n)

空间复杂度:O(n) 

LeetCode924 尽量减少恶意软件的传播

 

class Solution {
public:
    int minMalwareSpread(vector<vector<int>>& graph, vector<int>& initial) {
        int n=graph.size();
        vector<int> ids(n,0); //ids[i]表示节点i所在的连通分量
        unordered_map<int,int> id_size; //连通分量id, 大小
        int id=1;
        int size;
        function<void(int)> dfs=[&](int x){
            size++;
            ids[x]=id;
            for(int y=0;y<n;y++){
                if(ids[y]==0&&graph[x][y]==1){
                    dfs(y);
                }
            }
        };
        for(int i=0;i<n;i++){
            if(ids[i]==0){ //该节点未被访问过
                size=0;
                dfs(i);
                id_size[id]=size;
                id++;
            }
        }
        int m=initial.size();
        vector<int> sum(n,0); //sum[i]表示将节点i从已感染节点中删除,能够减少的感染节点数
        for(int i=0;i<m;i++){
            sum[initial[i]]=id_size[ids[initial[i]]];
        }
        for(int i=0;i<m;i++){//如果已感染节点x,y在同一连通分量中,sum[x]=0,sum[y]=0
            for(int j=i+1;j<m;j++){
                int x=initial[i],y=initial[j];
                if(ids[x]==ids[y]){
                    sum[x]=0;
                    sum[y]=0;
                }
            }
        }
        int res=initial[0];
        for(int i=0;i<m;i++){
            int x=initial[i];
            if(sum[x]>sum[res]||sum[x]==sum[res]&&x<res) res=x;
        }
        return res;
    }
};

 

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

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

相关文章

C#—串口和网口之间的通信详解

C#—串口和网口之间的通信 串口转网口、网口转串口&#xff0c;就是将网口发送来的数据包发送给串口设备&#xff0c;将串口设备返回的数据转发给网口客户端。 在C#中&#xff0c;将串口数据转换为网络数据并发送到网络&#xff0c;通常涉及以下步骤&#xff1a; 1. 创建一个…

C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;尤其是关于继承的两篇文章&#xff…

相机无须标定,使用基础矩阵F实现多相机内参自标定

Abstract 从给定的基本矩阵中进行两个摄像头的自我校准问题是几何计算机视觉中的基本问题之一。在已知主点和正方形像素的假设下&#xff0c;Bougnoux公式提供了一种计算两个未知焦距的方法。然而&#xff0c;在许多实际情况下&#xff0c;由于常见的奇异性&#xff0c;公式会…

xshell无法连接Ubuntu20.4

在之前红帽版本里&#xff0c;直接下了就可以用xshell直接连接&#xff0c;但是Ubuntu20.4不能直接连接&#xff0c;我开始以为是密码错了&#xff0c;但是我想了想vscode连接不需要密码&#xff0c;一样连接不上&#xff0c;我就在网上找了很多方法&#xff0c;最后终于连接上…

总线学习4--UART

想来串口通信是我第一次接触嵌入式就知道的&#xff0c;一直调试也是用串口线&#xff0c;但是里面的原理还真不清楚。这次难得把环境弄出来了&#xff0c;就顺便学学。 一 环境搭建 还是老规矩&#xff0c;废话不多说&#xff0c;干就完事。 这次用的树莓派zero小板&#x…

云计算实训19——上线一个静态的前端系统(续)

上线一个静态的前端系统(续) 准备工作 在eleme服务器上&#xff1a; 启动服务 启动rpcbind [rooteleme-static ~]# systemctl restart rpcbind 启动nfs [rooteleme-static ~]# systemctl restart nfs 在static-server主机上&#xff1a; 1.重启服务 启动smb [rootstatic…

重塑汽车制造未来:3D插图技术大师,零误差高效驱动新时代

在当今快速革新的汽车制造领域&#xff0c;高效、精准的产品设计与制造流程已成为众多车企破浪前行的核心引擎。但随着市场竞争的日益激烈&#xff0c;在产品设计与制造中&#xff0c;传统二维CAD设计的局限性越发明显——设计周期长、沟通成本高、错误频发及资源利用低效等问题…

AI算力租赁是什么,哪些行业会有需求?

一、AI算力租赁的定义与概述 AI算力租赁是指基于人工智能&#xff08;AI&#xff09;应用需求&#xff0c;将所需的计算能力&#xff08;即算力&#xff09;通过租赁服务的方式提供给企业和个人用户。这种服务允许用户根据需要租用人工智能计算资源&#xff0c;如图形处理单元…

[网鼎杯2018]Unfinish解题,五分钟带你解题

目录 前期准备 ​编辑 扫描目录 寻找注入点 构建payload&#xff1a; 开始注入&#xff1a; 寻找过滤规则 绕过过滤 构建python脚本 提交flag 总结 前期准备 这道题是2018年网鼎杯的一道题&#xff0c;是比较经典的一道sql二次注入的题&#xff0c;我们一起来看一下 …

B1.3 程序状态寄存器PSTATE的介绍

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】个人博客笔记导读目录(全部) B1.3 进程状态,PSTATE* 程序状态寄存器或PSTATE,是程序状态信息的抽象。所有指令集都提供操作 PSTATE 元素的指令。 以下 PSTATE 信…

第二十一天内容

上午 4、mysql基础命令 5、mysql操作命令 ------------------------------------------------------------------------------------------------------------------------------- 下午 1、脚本安装mysql 2、mysql命令回顾 3、mysql用户权限设置 4、命令练习 6、权限角色 7、…

按xls标签替换docx及xls内容

WPSoffice环境下&#xff0c;需要批量替换doc文档及xls表格某些内容&#xff0c;在windows下&#xff0c;可以用VBA宏实现&#xff0c;先建一个标签表格&#xff0c;然后按标签批量替换。但在Linux下&#xff0c;WPS表格宏不能跨文档操作WPS文字&#xff0c;于是想用python实现…

工程架构简析

文内项目 Github&#xff1a;XIAOJUSURVEY 架构 架构的设计最终是为了场景可以快速扩展&#xff0c;基于工程底座&#xff0c;使用者能够专注于业务领域的深入。 B端&#xff1a;面向问卷管理者&#xff0c;专注于问卷管理、问卷投放和数据分析三大核心能力的建设。&#xff0…

vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)

今天开发一个防某商城的商品图片放大镜&#xff0c;鼠标移动到图片位置时&#xff0c;右侧出现一个已放大的图片效果。 示例如下&#xff1a; 下图的图片的放大效果和小图的切换封装成了组件PicShow.vue&#xff0c;可根据需求自行修改&#xff0c;如下&#xff1a; 第一步&…

鸿蒙应用服务开发【钱包服务(ArkTS)】

介绍 基于Stage模型&#xff0c;提供钱包交通卡和Pass卡的开卡、预览卡、查询卡信息、更新卡片信息、删除卡片、初始化钱包环境等功能。 效果预览 具体实现 交通卡 在hms.core.payment.walletTransitCard中定义了钱包交通卡接口API&#xff0c;示例接口如下&#xff1a; /*…

【漏洞复现】用友NC Cloud系统queryPsnInfo接口SQL注入

文章目录 0x00 漏洞描述影响范围 0x01 测绘工具0x02 漏洞复现0x03 Nuclei检测脚本0x04 修复建议0x05 免责声明 0x00 漏洞描述 用友NC Cloud存是一款大型企业数字化平台。 在受影响的版本中&#xff0c;攻击者可以通过未授权访问 /ncchr/pm/obj/queryPsnInfo 接口&#xff0c;利…

综合安防管理平台LntonCVS视频监控汇聚平台视频数据智能化与资源共享方案

随着全球城市化进程的加快&#xff0c;智慧城市概念日益受到重视。在这一趋势下&#xff0c;LntonCVS视频汇聚平台作为新型智慧城市的重要智能基础设施之一&#xff0c;扮演着关键角色。该平台整合、接入和管理城市中各类视频资源&#xff0c;涵盖公共安全视频、交通监控、城市…

【五大海内外高校支持】2024年数字经济与计算机科学国际学术会议(DECS2024)

大会官网&#xff1a;www.icdecs.net 大会时间&#xff1a;2024年9月20-22日 大会地点&#xff1a;中国-厦门 截稿日期&#xff1a;详情见官网 支持单位 马来西亚理工大学 北京科技大学经济管理学院 南京信息工程大学 马来西亚敦胡先翁大学 大会嘉宾 大会主席 罗航…

opencascade AIS_ViewController源码学习 视图控制、包含鼠标事件等

opencascade AIS_ViewController 前言 用于在GUI和渲染线程之间处理视图器事件的辅助结构。 该类实现了以下功能&#xff1a; 缓存存储用户输入状态&#xff08;鼠标、触摸和键盘&#xff09;。 将鼠标/多点触控输入映射到视图相机操作&#xff08;平移、旋转、缩放&#xff0…

Mybatis(Day 18)

数据持久化是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中数据模型的统称。MyBatis 支持定制化 SQL、存储过程以及高级映射&#xff0c;可以在实体类和 SQL 语句之间建立映射关系&#xff0c;是一种半自动化的 ORM 实现。ORM&#xff08;Object Re…