蓝桥杯双周赛算法心得——串门(双链表数组+双dfs)

news2024/11/25 4:19:54

大家好,我是晴天学长,树和dfs的结合,其邻接表的存图方法也很重要。需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1) .串门

在这里插入图片描述


2) .算法思路

串门(怎么存图很关键)
用双链表存
1.找到最长的那段路(树的最长直径)
2.答案=(总和)*2-最长那段路。

1.接受数据
2.建立标记数组,存图
3.从1开始找最大路径,并更新最大路径的点
4.从最大路径的点开始出发,再找最大路径
5.答案


3).算法步骤

1.读取输入的节点数量 n。
2.创建一个布尔数组 vis,用于记录节点的访问状态。
3.初始化变量 total 为节点数量 n。
4.将 n 减 1,并创建一个链表列表 list,用于存储图的边关系。
5.循环 n 次,读取边的起点 u、终点 v 和权重 w。
6.将路径和增加 w + w。
7.在 list 中的起点 u 处添加边的信息 [v, w]。
8.在 list 中的终点 v 处添加边的信息 [u, w]。
9.调用 dfs 方法进行第一次深度优先搜索,参数为起点 1,访问状态数组 vis 和初始路径和 0。
10.重置访问状态数组 vis 为初始状态,最大路径和 maxsum 为 0。
11.调用 dfs 方法进行第二次深度优先搜索,参数为节点编号 nodeindex,访问状态数组 vis 和初始路径和 0。
12.计算最终结果,输出 totalsum - maxsum。


4). 代码实例

package LanQiaoTest.DFS;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class 串门 {
    static List<List<int[]>> list = new ArrayList<>();
    static long maxsum = 0;
    static int nodeindex = 0;
    static long totalsum = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        boolean[] vis = new boolean[n + 10];
        int total = n ;
        n--;
        //建立链表
        for (int i = 0; i < n + 10; i++) {
            list.add(new ArrayList<>());
        }
        //接受数据,存图(树)
        while (n > 0) {
            int u = scanner.nextInt();
            int v = scanner.nextInt();
            int w = scanner.nextInt();
            //添加路径和
            totalsum += w + w;
            // 两个路径都可以走
            list.get(u).add(new int[]{v, w});
            list.get(v).add(new int[]{u, w});
            n--;
        }
        //开始第一次的dfs
        dfs(1, vis, 0);
        //第一次结束,开始第二次
        vis = new boolean[total + 10];
        maxsum = 0;
        // 开始找第二次
        dfs(nodeindex, vis, 0);
        System.out.println(totalsum - maxsum);
    }

    public static void dfs(int start, boolean[] vis, long sum) {
        //避免往回走
        vis[start] = true;
        if (sum > maxsum) {
            maxsum = sum;
            nodeindex = start;
        }
        //开枝散叶
        for (int i = 0; i < list.get(start).size(); i++) {
            int[] temp = list.get(start).get(i);
            //没有标记,就走下去
            if (!vis[temp[0]]) {
                dfs(temp[0], vis, sum+temp[1]);
            }
        }
        //也可以不回溯,因为跟随着的是返回结果,不会在重复的走下去了,回溯也行。
        vis[start]=false;
    }
}


4).总结

  • 图(树的)正确遍历。
  • dfs(回溯)

试题链接:

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

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

相关文章

【Linux】-模拟实现一个缓冲区

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

ACmix:卷积和self-attention的结合,YOLOv5改进之ACmix

目录 一、ACmix理论部分 二、代码 三、YOLOv5改进 ACC3 一、ACmix理论部分 论文地址:2111.14556.pdf (arxi

Git简介和安装

一&#xff0c;Git简介 Git 是一个分布式版本控制工具&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件&#xff0c;Git 仓库分为两种&#xff1a; 本地仓库&#xff1a;开发人员自己电脑上的 Git 仓库 远程仓库&#xff1a;远程…

centos部署nginx集群

部署nginx集群&#xff0c;一台nginx出故障&#xff0c;另外的nginx能直接使用&#xff08;这里用两台做实验&#xff09; 规划&#xff1a;143.1.26.212是主&#xff0c;143.1.26.213是从&#xff0c;143.1.26.214是VIP&#xff08;vip是客户访问的ip&#xff09; 小白教程&…

浅谈剩余电流动作继电器在电动伸缩门的应用

摘 要&#xff1a;随着时代的发展&#xff0c;越来越多的小区、厂区、园区和学校等场所的大门安装了电动伸缩门&#xff0c;几乎可以说随处可见。电动伸缩门是一种长期在户外使用的设备&#xff0c;工作电压为220 V&#xff08;过去也有380 V&#xff09;&#xff0c;其电机是处…

文件批量移动自动创建文件夹及生成编号重命名,让整理更轻松

在我们日常的生活和工作中&#xff0c;文件的整理和管理是至关重要的一项任务。有时候&#xff0c;我们需要将大量的文件转移到不同的文件夹中&#xff0c;并对它们进行重命名。手动执行这些任务不仅耗时&#xff0c;而且容易出错。云炫文件管理器能够轻松实现文件的批量移动、…

HF Hub 现已加入存储区域功能

我们在 企业版 Hub 服务 方案中推出了 存储区域&#xff08;Storage Regions&#xff09; 功能。https://hf.co/enterprise 通过此功能&#xff0c;用户能够自主决定其组织的模型和数据集的存储地点&#xff0c;这带来两大显著优势&#xff0c;接下来的内容会进行简要介绍&…

CSS特效001:鼠标放div上,实现旋转、放大、移动等效果

GPT能够很好的应用到我们的代码开发中&#xff0c;能够提高开发速度。你可以利用其代码&#xff0c;做出一定的更改&#xff0c;然后实现效能。 css实战中&#xff0c;经常会看到这样的场景&#xff0c;鼠标放到一个图片或者一个div块状时候&#xff0c;会出现旋转、放大、移动…

基于SSM的办公自动化管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

基于孔雀算法的无人机航迹规划-附代码

基于孔雀算法的无人机航迹规划 文章目录 基于孔雀算法的无人机航迹规划1.孔雀搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用孔雀算法来优化无人机航迹规划。 1.孔雀搜索算法 …

云安全—Dashboard 攻击面

0x00 前言 众所诸知&#xff0c;如果只是一味的REST接口或者命令行话的操作方式&#xff0c;就会变相的提高操作门款&#xff0c;并且不会有很好的呈现方式&#xff0c;所以就有了web ui的方式&#xff0c;也就是Dashboar面板&#xff0c;本篇主要讨论一下关于Dashboar面板的概…

Solidity之变量数据存储和作用域

引用类型 引用类型(Reference Type)&#xff1a;包括数组&#xff08;array&#xff09;&#xff0c;结构体&#xff08;struct&#xff09;和映射&#xff08;mapping&#xff09;&#xff0c;这类变量占空间大&#xff0c;赋值时候直接传递地址&#xff08;类似指针&#xff…

加州驾照笔试准备笔记

文章目录 数字错题注意事项 参考文档&#xff1a;官方中文文档 数字 BAC&#xff1a;21岁以下0.01%&#xff1b;其它成人是 0.08%當有車輛向您駛來時&#xff0c;在距離對方車輛 500 英尺內&#xff0c;或&#xff0c;同向行駛的前方車輛距離您不超過 300 呎&#xff0c;將遠光…

01-MySQL-安装

一、windows安装mysql 安装详情查看 https://blog.csdn.net/cygqtt/article/details/124396223 二、CentOS安装mysql (方式一) ①&#xff1a;安装MySQL 8的存储库 # 安装前可以更新一下yum包 yum updatewget https://repo.mysql.com//mysql80-community-release-el7-3.noarc…

04-MySQL-基础-多表查询事务

一、多表查询 ①&#xff1a;多表关系 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结 构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分…

RAID卡管理工具使用

RAID 基本概念 由于现代数据中心业务量的与日俱增&#xff0c;单台服务器上需要运行的数据也日益增多。当 单个物理磁盘在容量和安全性上不足以支持系统业务时&#xff0c;就需要将多个磁盘以某种特 定方式组合起来&#xff0c;对外作为一个可见的磁盘来使用&#xff0c;才可…

你知道在游戏开发中怎么将算法与其作用的对象隔离开来吗?

点击上方亿元程序员关注和★星标 引言 你可能知道的设计模式-访问者模式 大家好&#xff0c;今天我们要来聊一聊在游戏开发中非常实用的设计模式——访问者模式。访问者模式是一种将算法与对象结构分离的软件设计模式&#xff0c;它可以让代码更加灵活、可扩展&#xff0c;同…

11.6区间估计、置信区间

已知总体方差 就是说&#xff0c;在总体里随机取样的时候&#xff0c;取样的均值服从总体的均值&#xff0c;方差为总体均值方差与样本量比值的正态分布&#xff0c;样本量越小&#xff0c;方差越大&#xff0c;样本量越大&#xff0c;方差越小&#xff0c;取样的样本均值浮动…

VMware ifconfig ip报错解决记录

1.报错 ifconfig后出现以下报错 lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 9216 b…

5.5逆波兰表达式求值(LC150-M)

算法&#xff1a; 其实就是后缀表达式。 本题中每一个子表达式要得出一个结果&#xff0c;然后拿这个结果再进行运算&#xff0c;那么这岂不就是一个相邻字符串消除的过程&#xff0c;和1047.删除字符串中的所有相邻重复项 (opens new window)中的对对碰游戏是不是就非常像了…