【算法学习】基环树

news/2024/10/29 19:28:14/文章来源:https://www.cnblogs.com/sadlin/p/18514214

基环树

基环树就是类似于在树上加了一条边形成了环,去点环上的一条边后就会变成数,如下图。

image

这是一个 \(n\) 个点 \(n\) 条边的连通图,如果不保证联通,它就会成为基环树森林。

外向树:每个点都只有一条入边,因为向内上。

内向树:每个点都只有一条出边,因为向外少。

怎么用呢?

因为有环的性质,所以可以将环拆成树,再对树继续树形dp即可。

例题

P2607 [ZJOI2008] 骑士

因为一个骑士只会讨厌另外一个骑士,所以每个连通块都是一颗基环树,所以我们对每颗基环树拆环成树进行树形dp即可。

我们可以把图建成一个有向图,他讨厌的骑士作他的父亲,因为我们环上相邻的两个点都不能选,所以我们先强制不选根节点进行一遍树形dp,状态为f[x][1/0]表示选/不选x节点最大的权值,然后再对根节点的父亲进行一遍树形dp,这样就包含了所有情况了!!

#include <bits/stdc++.h>
#define re register 
const int N=1e6+1e5;
#define int long long
const int inf=1e9;
using namespace std;
int n;
vector<int> v[N];
int vis[N];
int f[N][3];
int fa[N];
int a[N];
int ans=0;
int mx=0;
int root=1;void dfs(int x){vis[x]=1;f[x][0]=0;f[x][1]=a[x];for(int i:v[x]){if(i!=root){dfs(i);f[x][0]+=max(f[i][1],f[i][0]);f[x][1]+=f[i][0];}else{f[i][1]=-inf;}}
} signed main(){ios::sync_with_stdio(false);cin>>n;for(int i=1;i<=n;i++){cin>>a[i]>>fa[i];v[fa[i]].push_back(i);}for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;mx=0;root=i;while(!vis[fa[root]]){vis[root]=1;root=fa[root];}vis[root]=1;dfs(root);mx=max(f[root][1],f[root][0]);root=fa[root];dfs(root);ans+=max(mx,max(f[root][1],f[root][0]));}}cout<<ans;return 0;
}

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

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

相关文章

深度学习入门笔记——DataLoader的使用

如何使用数据集DataSet? 在介绍DataLoader之前,需要先了解数据集DataSet的使用。Pytorch中集成了很多已经处理好的数据集,在pytorch的torchvision、torchtext等模块有一些典型的数据集,可以通过配置来下载使用。 以CIFAR10 数据集为例,文档已经描述的很清晰了,其中要注意…

手机中的计算摄影:超广角畸变校正

广角镜头,甚至超广角镜头已经成为了现在手机的标配,这样的手机能够拍摄出宽广的视角,还能够在合拍时拍下更多的人物。比如最新的iPhone13 Pro就有一颗26mm焦距的广角镜头,还有一颗13mm焦距的超广角镜头。事实上,自2019年起,很多手机摄像头的FOV就已经超过100度了 然而,广…

GitHub Star 数量前 5 的开源应用程序生成器

发现 GitHub 上最受欢迎的开源应用程序生成器。欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过:在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过…

ddl和dml的区别

数据库管理系统中,DDL(Data Definition Language)和DML(Data Manipulation Language)是两种不同的SQL语言类型,用于执行不同的任务。本文将深入探讨DDL和DML之间的区别,包括定义、功能、用途以及示例,以帮助读者更好地理解它们在数据库操作中的作用。定义 DDL:DDL是用…

叶涛铭的第二次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/zjlg/rjjc/ 这个作业的目标:写一个计算字符数,单词数,句子数的程序。 姓名-学号:叶涛铭 2022329301159 码云地址:https://gitee.com/ye-taoming/ye-taomings-second-homework/tree/master/ 这是一个计算字符数的程序…

什么是区块链即服务BaaS

区块链即服务(BaaS)是一种允许用户在云基础设施上创建,部署和管理自己的区块链应用和智能合约的服务。BaaS供应商负责维护区块链的基础设施,提供必要的操作和维护服务,使企业和开发者可以专注于业务应用的开发和运营。BaaS提供者为用户创建和部署专属的区块链网络,包括节点…

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第6周学习总结

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第6周学习总结 作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 (如2024-2025-1计算机基础与程序设计第六周作业这个作业的目标 <参考上面的学习总结模板,把学习过程通过博客(随…

全连接层的作用是什么

全连接层的作用有:一、特征组合与转换;二、参数学习;三、特征映射;四、非线性变换;五、信息传递;六、适用于多种任务;七、参数量控制。特征组合与转换是指,全连接层在神经网络中起着关键作用,它将上一层的所有神经元与当前层的所有神经元进行全连接。一、特征组合与转…

阿里云轻量应用服务器和ECS云服务器有什么不同

阿里云轻量应用服务器和ECS云服务器,两者均是阿里云提供的服务器服务,它们的主要差别可以从以下几个方面进行概述:1、定位与使用场景;2、价格;3、性能与资源;4、操作和管理。轻量应用服务器的主要定位是为了满足中小型企业或个人开发者的需求,简化了服务器购买和管理的流…

明星人脸识别基于VGG、MTCNN、RESNET深度学习卷积神经网络应用|附数据代码

全文链接:https://tecdat.cn/?p=38046 原文出处:拓端数据部落公众号 分析师:Xinzu Du人脸识别技术作为生物特征识别技术的重要组成部分,在近三十年里得到了广泛的关注和研究,已经成为计算机视觉、模式识别领域的研究热点。然而由于存在光线、背景、人脸遮挡等问题,如何准…

Paper Reading: Random Balance ensembles for multiclass imbalance learning

本文将 RandBal 方法从二分类扩展到多分类,提出了两种集成策略。第一种方法称为多重随机平衡 MultiRandBal,该方法同时处理所有类,每个基分类器的训练数据都是随机抽样的。第二种方法是将多分类问题按照 OVO 或 OVA 的分解为两分类问题,并构建 RandBal 集成学习器,这两个版…