【刷题笔记】第八天

文章目录

  • [928. 尽量减少恶意软件的传播 II](https://leetcode.cn/problems/minimize-malware-spread-ii/)
    • 方法1:dfs
    • 方法2:并查集
  • [GCD and LCM](https://vjudge.net.cn/problem/Aizu-0005)
  • [Missing Bigram](https://vjudge.net.cn/problem/CodeForces-1618B)

928. 尽量减少恶意软件的传播 II

方法1:dfs

只遍历非感染节点

从未感染的节点出发,遇到非感染节点就继续dfs,dfs过程中统计节点的个数。遇到感染节点,就更新状态。

class Solution {boolean[] vis, isInitial;int size, nodeState;public void dfs(int x, int[][] graph) {vis[x] = true;size++;for (int y = 0; y < graph[x].length; ++y) {if (vis[y]) continue;if (graph[x][y] == 0) {continue;}if (isInitial[y]) {// y是感染节点if (nodeState == -1) {nodeState = y;} else if (nodeState >= 0 && nodeState != y) {//nodeState != y: 避免在一次dfs中多次搜索到(因为可能存在多条到y的路径),见解释1nodeState = -2;} continue;}dfs(y, graph);}}public int minMalwareSpread(int[][] graph, int[] initial) {int n = graph.length;vis = new boolean[n];isInitial = new boolean[n];Arrays.sort(initial);for (int i : initial) {isInitial[i] = true;}int[] cnt = new int[n]; // cnt[i]: cnt[i]个节点只被i这个感染节点感染,i只能是感染节点int ans = n;int maxSize = 0;for (int i = 0; i < n; ++i) {if (vis[i] || isInitial[i]) continue;size = 0;nodeState = -1; // -1:初始状态,>=x:仅找到了一个感染节点,-2:找到了多个感染节点dfs(i, graph);if (nodeState >= 0) {if (size > 0) {cnt[nodeState] += size; // 注意是累加,可能存在多个节点遍历到nodeState,而cnt[nodeState]是总的感染个数if (cnt[nodeState] > maxSize) {maxSize = cnt[nodeState];ans = nodeState;} else if (cnt[nodeState] == maxSize && nodeState < ans) {ans = nodeState;}}}}return ans == n ? initial[0] : ans;}
}

解释1:如下图,3是感染节点,到达3有两条路径,一条是经过1这个节点,另一条是经过2这个节点。如果不加nodeState != y这个判断,在第一次遍历到3这个节点时,nodeState = 3,等到第二次遍历到3这个节点时,nodeState=-2,这是不对的,因为这个同一个感染节点

image-20240417101704323

方法2:并查集

构建不包含非感染节点的连通集,统计该连通集连接的感染节点个数,若为1,假设这个感染节点是i,相当于把1这个感染节点去掉后,可以避免整个连通集感染。也就是1这个感染节点可以感染的节点数。
我们计算每一个感染节点可以感染的节点数(与感染节点相连的所有连通集的节点个数累加),取感染节点最多,且索引最小对应的感染节点

class Solution {int[] size; // 记录集合的个数boolean[] isInitial;int find(int x, int[] p) {if (x != p[x]) {p[x] = find(p[x], p);}return p[x];}public int minMalwareSpread(int[][] graph, int[] initial) {int n = graph.length;size = new int[n];Arrays.fill(size, 1);Arrays.sort(initial);isInitial = new boolean[n];int[] p = new int[n];for (int i = 0; i < n; ++i) p[i] = i;for (int i : initial) {isInitial[i] = true;}for (int i = 0; i < n; ++i) {if (isInitial[i]) continue;for (int j = i + 1; j < n; ++j) {if (isInitial[j] || graph[i][j] == 0) continue;int iFather = find(i, p);int jFather = find(j, p);if (iFather != jFather) {size[iFather] += size[jFather];p[jFather] = iFather;}}}Set<Integer>[] set = new HashSet[n]; // s[i]统计所有与i(i是感染节点)相连的连通分量的代表节点// Arrays.fill(set, new HashSet<>()); 这条语句执行后,set中所有的元素都是同一个对象(被坑惨了~~)for (int i = 0; i < n; ++i) {set[i] = new HashSet<>();}int[] cnt = new int[n]; // cnt[i]: i这个代表节点表示的连通分量连接cnt[i]个(初始)感染节点for (int i : initial) {for (int j = 0; j < graph[i].length; ++j) {if (graph[i][j] == 0 || isInitial[j]) continue; //j为非感染节点int jFather = find(j, p);set[i].add(jFather);}for (int root : set[i]) {cnt[root]++;}}   int ans = n;int maxSize = 0;for (int i : initial) {int count = 0; // 计算与i相连的所有连通图的总元素个数for (int root : set[i]) {if (cnt[root] == 1) { // 如果连通分量连接这多个感染节点,那么移除一个无法避免感染count += size[root];}}if (count > maxSize) {maxSize = count;ans = i;} else if (count == maxSize && i < ans) {ans = i;}}return ans == n ? initial[0] : ans;}
}

GCD and LCM

水一道

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>using namespace std;
typedef long long ll;ll gcd(ll a, ll b) {while (b != 0) {ll t = a % b;a = b;b = t;}return a;
}int main() {ll a, b;while (scanf("%lld%lld", &a, &b) == 2) {if (a < b) {swap(a, b);}ll g = gcd(a, b);ll l = (ll)a / g * b;printf("%lld %lld\n", g, l);}return 0;
}

Missing Bigram

相邻的两个字母称为一个bigram

题目给定缺失了一个bigram的序列,要我们求原始的序列

如果题目给定的两个相邻bigram,前一个bigram的最后一个字符和后一个bigram的第一个字符相等,说明这两个bigram中没有缺失字符,就将前一个bigram与后一个bigram的最后一个字符拼接;否则,就将前一个bigram与后一个bigram整体拼接。

最后判断拼接序列的长度是否为n,如果不为n,就在后面补a。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;string s;
int n;
int main() {int t;scanf("%d", &t);while (t--) {scanf("%d", &n);cin >> s;string res = s;string pre = s;for (int i = 0; i < n - 3; ++i) {string cur;cin >> cur;if (pre[1] == cur[0]) {res += cur[1];}else {res += cur;}pre = cur;}while (res.size() < n) res += "a";cout << res << endl;}return 0;
}

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

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

相关文章

基于springboot+vue+Mysql的简历系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

数据赋能(60)——要求:数据服务部门能力

“要求&#xff1a;数据服务部门实施数据赋能影响因素”是作为标准的参考内容编写的。 在实施数据赋能中&#xff0c;数据服务部门的能力体现在多个方面&#xff0c;关键能力如下图所示。 在实施数据赋能的过程中&#xff0c;数据服务部门应具备的关键能力如下。 业务理解和沟…

案例与脚本实践:DolphinDB 轻量级实时数仓的构建与应用

DolphinDB 高性能分布式时序数据库&#xff0c;具有分布式计算、事务支持、多模存储、以及流批一体等能力&#xff0c;非常适合作为一款理想的轻量级大数据平台&#xff0c;轻松搭建一站式的高性能实时数据仓库。 本教程将以案例与脚本的方式&#xff0c;介绍如何通过 Dolphin…

MySQL 的事务

事务概念 MySQL事务是一个或者多个的数据库操作&#xff0c;要么全部执行成功&#xff0c;要么全部失败回滚。 事务是通过事务日志来实现的&#xff0c;事务日志包括&#xff1a;redo log和undo log。 事务状态 事务有以下五种状态&#xff1a; 活动的部分提交的失败的中止的…

使用GAN做图像超分——SRGAN,ESRGAN

在GAN出现之前&#xff0c;使用的更多是MSE&#xff0c;PSNR,SSIM来衡量图像相似度&#xff0c;同时也使用他们作为损失函数。 但是这些引以为傲的指标&#xff0c;有时候也不是那么靠谱&#xff1a; MSE对于大的误差更敏感&#xff0c;所以结果就是会倾向于收敛到期望附近&am…

【深度学习】wandb模型训练可视化工具使用方法

【深度学习】wandb模型训练可视化工具使用方法 wandb简介功能介绍登陆注册以及API keysproject和runsproject和runs的关系 wandb的配置实验跟踪版本管理Case可视化分析可视化自动调参&#xff08;wandb.sweep&#xff09;配置wandb.sweep1.配置 sweep_config2.初始化 sweep con…

【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python 密码学实用指南(全)

原文&#xff1a;zh.annas-archive.org/md5/fe5e9f4d664790ea92fb33d78ca9108d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 密码学在保护关键系统和敏感信息方面有着悠久而重要的历史。本书将向您展示如何使用 Python 加密、评估、比较和攻击数据。总的来说&…

Qt对话框

文章目录 创建普通的对话框对话框的内存泄露问题自定义对话框模态式对话框QMessageBox&#xff08;消息对话框&#xff09;对话框类型对话框按钮接收对话框返回值演示其他创建方式 QColorDialog&#xff08;颜色对话框&#xff09;案例 QFileDialog&#xff08;文件对话框&…

仿真测试的应用领域

仿真测试在各种领域中都有广泛的应用&#xff0c;以下是一些应用最广泛的场景&#xff1a; 工业制造&#xff1a;通过模拟制造过程&#xff0c;可以预测产品的质量和性能&#xff0c;优化生产流程&#xff0c;降低成本。航空航天&#xff1a;飞机、导弹、航天器等的设计和研发…

Python - 字符串的应用

字符串格式化问题 使用规则举例: name input("请输入你的名字&#xff1a;") address input("请输入你的住址&#xff1a;") age int(input("请输入你的年龄&#xff1a;")) hobby input("请输入你的爱好&#xff1a;") # %s 字符…

【Android GUI】从总体上了解Android的GUI体系

文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*&#xff0c;其中fb0表示…

快速上手Linux核心命令

Linux 的重要性不用我多说了吧&#xff0c;大多数互联网公司&#xff0c;服务器都是采用的Linux操作系统 Linux是一个主要通过命令行来进行管理的操作系统。 只有熟练掌握Linux核心命令&#xff0c;在使用起来我们才会得心应手 这里给大家整理了Linux一些核心命令&#xff0…

Android --- Activity

官方文档-activity Activity 提供窗口&#xff0c;供应在其中多个界面。此窗口通常会填满屏幕&#xff0c;但也可能小于屏幕并浮动在其他窗口之上。 大多数应用包含多个屏幕&#xff0c;这意味着它们包含多个 Activity。通常&#xff0c;应用中的一个 Activity 会被指定主 Ac…

JAVA基础08- 继承,重写,super以及this

目录 继承&#xff08;extends&#xff09; 定义 说明 作用 方法的重写 定义 重写关键点 方法重写与重载的区别 练习 练习1&#xff08;方法继承与重写的简单练习&#xff09; 练习2&#xff08;方法继承与重写的进阶练习&#xff09; This的使用 定义 作用以及注…

基于SpringBoot+Vue的IT技术交流平台(源码+文档+包运行)

一.系统概述 我国科学技术的不断发展&#xff0c;计算机的应用日渐成熟&#xff0c;其强大的功能给人们留下深刻的印象&#xff0c;它已经应用到了人类社会的各个层次的领域&#xff0c;发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分&#xff0c;使用计算机进行…

leetcode-分割链表

题目 面试题 02.04. 分割链表 提示 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1&#xff1a; 输入&#xff…

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容&#xff1a; 煤矿安全知识基础学习VR系统内容包括&#xff1a;下井流程&#xff08;正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全&#xff09;&#xff1b;运煤流程…

SpringBoot集成RockerMQ

1.引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</version> </dependency>2.配置服务器地址 #Rocketmq配置 rocketmq.name-server192…

专业清洁工匠服务网站模板 html网站

目录 一.前言 二.页面展示 三.下载链接 一.前言 该HTML代码生成了一个网页&#xff0c;包括以下内容&#xff1a; 头部信息&#xff1a;指定了网页的基本设置和元数据&#xff0c;例如字符编码、视口大小等。CSS文件&#xff1a;引入了多个CSS文件&#xff0c;用于设置网页…