热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

牛客xb赛48F孤独的树树形dp处理森林筛法

题目传送门题解思路因为N最大就是1e5,所以对与每个权值他最多只能有6个不同的质因子。我们每次只能去除一个质因子,所以,如果要去除这个

题目

在这里插入图片描述
传送门


题解思路

因为N最大就是1e5,所以对与每个权值他最多只能有6个不同的质因子。
我们每次只能去除一个质因子,所以,如果要去除这个点的这种质因子就多次去除这个即可。

我们从最大的质因子不断往小删。这样就能O1获取我们此时到底要删谁。

有相同质因子的点可以构成森林(多个连通块),我们对每个连通块,每次都处理掉一种质因子,这样就能保证复杂度在Nlog(N)。

对于每个连通块处理同种质因子有树形dp来计算最小的次数,最后再累加。

dp[i][0] 表示以i为根节点的子树,根节点不进行删除操作使得满足题目条件的最小次数。

dp[i][1]就表示进行操作的最小次数。

最后在根节点取min即可。


AC代码

#include
//#include
//priority_queue
#define PII pair<int,int>
#define ll long longusing namespace std;const int INF &#61; 0x3f3f3f3f;
const int N &#61; 200100;
int a[N] ;
vector <int> head[N] ;
set <int> vis[N] ;
int f[N][3] ;
int np[N] ;
int mnp[N] ;
void si()
{for (int i &#61; 2 ; i <&#61; 1e5 &#43; 5 ; i&#43;&#43; ){if (!np[i]){for (int j &#61; i ; j <&#61; 1e5 &#43; 5 ; j &#43;&#61; i ){np[j] &#61; 1 ; mnp[j] &#61; i ; }}}
}
void dfs(int x , int p )
{vis[x].insert(p) ; int cnt &#61; 0 ; while ( a[x] % p &#61;&#61; 0 )a[x]/&#61;p,cnt&#43;&#43;;int sum1 &#61; 0 ,sum0 &#61; 0 ; for (int i &#61; 0 ; i < head[x].size() ; i&#43;&#43; ){int sk &#61; head[x][i] ;if ( !vis[sk].count(p) && a[sk] % p &#61;&#61; 0 ){dfs(sk,p) ; sum0 &#43;&#61; min(f[sk][0],f[sk][1]) ; sum1 &#43;&#61; f[sk][1] ; }}f[x][0] &#61; sum1 ; f[x][1] &#61; sum0 &#43; cnt ;
}
void solve()
{si();int n ;cin >> n ; for (int i &#61; 1 ; i <&#61; n ; i&#43;&#43; )cin >> a[i] ; for (int i &#61; 1 ; i < n ; i&#43;&#43; ){int t1 , t2 ;cin >> t1 >> t2 ; head[t1].push_back(t2) ; head[t2].push_back(t1) ; }int ans &#61; 0 ; for (int i &#61; 1 ; i <&#61; n ; i&#43;&#43; ){while ( a[i] !&#61; 1 ){int p &#61; mnp[a[i]] ; if (!vis[i].count(p)){dfs(i,p) ; ans &#43;&#61; min(f[i][1],f[i][0]) ; }}}cout << ans << "\n";
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve() ;return 0 ;
}

推荐阅读
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
author-avatar
夜夜0603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有