图论DFS:黑红树

news/2025/1/30 11:53:46/

在这里插入图片描述

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页

往 {\color{Red} {\Huge 往} } 期 {\color{Green} {\Huge 期} } 文 {\color{Blue} {\Huge 文} } 章 {\color{Orange} {\Huge 章}}

  • DFS 算法:记忆化搜索
  • DFS 算法:全排列问题
  • DFS 算法:洛谷B3625迷宫寻路

此系列更新频繁,求各位读者点赞
关注我可以了解更多内容哦
偷偷告诉你,我正在冲 1100 粉 {\color{Gray} {\small 偷偷告诉你,我正在冲1100粉} } 偷偷告诉你,我正在冲1100
你们有什么想了解的可以发在评论区,我会仔细的看 {\color{Gray} {\small 你们有什么想了解的可以发在评论区,我会仔细的看} } 你们有什么想了解的可以发在评论区,我会仔细的看
1100 粉时我会抓几个做文章 {\color{Gray} {\small1100粉时我会抓几个做文章} } 1100粉时我会抓几个做文章


目录

  • 今天我们学什么
  • 题目
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 题解
      • 思路
      • 代码
  • 总结

今天我们学什么

今天我们不学什么,就是做一道图论DFS的题目

题目

题目描述

给定一棵树,每个结点有一个整数权值,一开始每个结点均为黑色。

若相邻两个黑色结点的权值之和为质数,我们就可以把其中的一个结点变成红色。问最多可以把多少个点变为红色。

输入格式

第一行一个整数 n n n,表示树的结点数量。

第二行 n n n 个整数 a 1 , ⋯ , a n a_1, \cdots, a_n a1,,an,表示每个结点的权值。

接下来的 n − 1 n-1 n1 行,每行两个整数 x , y x,y x,y,表示结点 x , y x,y x,y 之间有一条边。

输出格式

一个整数,表示最多可以把多少个点变为红色。

样例 #1

样例输入 #1

3
1 2 3
1 3
1 2

样例输出 #1

1

提示

测试点编号 n n n a i a_i ai
1,2 1 ≤ n ≤ 20 1\le n\le 20 1n20 1 ≤ a i ≤ 100 1\le a_i\le 100 1ai100
3,4 1 ≤ n ≤ 1000 1\le n\le 1000 1n1000 1 ≤ a i ≤ 1000 1\le a_i\le 1000 1ai1000
5,6,7 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105 1 ≤ a i ≤ 1 0 5 1\le a_i\le 10^5 1ai105
8,9,10 1 ≤ n ≤ 3 × 1 0 5 1\le n\le 3\times 10^5 1n3×105 1 ≤ a i ≤ 1 0 6 1\le a_i\le 10^6 1ai106

题解

思路

简单的图论DFS模板题目,稍稍修改模板即可

代码

#include <bits/stdc++.h>
using namespace std;
const int N=300005;
vector<int> G[N];
int value[N],ans,n;
bool visited[N];
bool is_prime[2000005];
void dfs(int step)
{int now=value[step];visited[step]=true;for(auto a:G[step]){if(!visited[a]){int temp=value[a];if(is_prime[temp+now]){ans++;}dfs(a);}}
}
int main()
{memset(is_prime,true,sizeof(is_prime));is_prime[0]=is_prime[1]=false;for(int i=2; i<=2000000; i++){if(is_prime[i]){for(int j=2; i*j<=2000000; j++){is_prime[i*j]=false;}}}cin>>n;for(int i=1; i<=n; i++){cin>>value[i];}for(int i=1; i<n; i++){int x,y;cin>>x>>y;G[x].push_back(y);G[y].push_back(x);}for(int i=1; i<=n; i++){if(!visited[i]){dfs(i);}}cout<<ans;return 0;
}

怎么样,这是不是很简单呢?

总结

有一些题是模板题,此时套上模板稍稍修改即可


http://www.ppmy.cn/news/1567882.html

相关文章

Flowmix/Docx 多模态文档编辑器: 让文档不止于文档

hi, 大家好, 我是徐小夕. 最近 flowmix/docx 多模态文档编辑器仍在持续迭代中&#xff0c;致力于帮助企业构建专业级文档知识编辑器. 接下来和大家分享一下我们最近的更新&#xff1a; 体验地址: https://orange.turntip.cn/docx-react 在和大家分享更新功能之前&#xff0c;我…

如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt

文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…

C/C++中的#define和const的特点与区别

在C和C中&#xff0c;#define和const都可以用来定义常量&#xff0c;但它们在使用方式和语义上有很大的不同。下面将详细对比它们的特点和使用场景。 #define 定义方式&#xff1a; #define是预处理器指令&#xff0c;用于定义宏。它在编译前被处理&#xff0c;将代码中的所有出…

go 循环处理无限极数据

数据表结构&#xff1a; CREATE TABLE permission (id int(11) NOT NULL AUTO_INCREMENT COMMENT 权限ID,permission_name varchar(255) DEFAULT NULL COMMENT 权限名称,permission_url varchar(255) DEFAULT NULL COMMENT 权限路由,status tinyint(1) DEFAULT NULL COMMENT 权…

Layui 列表根据不同数据展示不同内容,并展示对应颜色

Layui 列表根据不同数据展示不同内容&#xff0c;并展示对应颜色 let cols [[{title: 模板编码, field: templateCode, align: center},{title: 消息内容, field: messageContent, align: center},{title: 消息状态, field: messageStatus, align: center, templet: function …

【starrocks学习】之catalog

目录 一、介绍 二、Catalog的分类 三、使用方法 四、简单示例 一、介绍 ‌StarRocks的Catalog功能‌是一种数据目录管理工具&#xff0c;用于同时管理和查询内部和外部数据。StarRocks从2.3版本开始支持Catalog功能&#xff0c;允许用户在一个系统中方便地访问和查询存储在…

【云安全】云原生-K8S-搭建/安装/部署

一、准备3台虚拟机 务必保证3台是同样的操作系统&#xff01; 1、我这里原有1台centos7&#xff0c;为了节省资源和效率&#xff0c;打算通过“创建链接克隆”2台出来 2、克隆之前&#xff0c;先看一下是否存在k8s相关组件&#xff0c;或者docker相关组件 3、卸载原有的docker …

PostgreSQL 约束

PostgreSQL 约束 在数据库设计中,约束(Constraint)是一种规则,用于确保数据库中的数据满足特定的条件。PostgreSQL 作为一款功能强大的开源关系型数据库管理系统,提供了多种约束类型,以帮助开发者维护数据的一致性和准确性。本文将详细介绍 PostgreSQL 中常见的约束类型…