hdu 6430 Problem E. TeaTree (合并线段树)

http://acm.hdu.edu.cn/showproblem.php?pid=6430

 

题意:

一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的最大值,要求输出每个节点的heard值

 

思路:

因为每个点的权值不超过1e5,所以可以预处理每个点的因子,然后建n颗线段树,只要有两个节点有相同答案就维护答案,每次都把所有子节点的线段树与父节点合并。

代码:

#include
using namespace std;
const int maxn=1e5+10;
const int inf=0x7fffffff;
vectorv[maxn],yz[maxn];
int root[maxn],ls[maxn*400],rs[maxn*400],sum[maxn*400];
int ans[maxn];
int cnt=0;
void init()
{
    for(int i=1;i

 

你可能感兴趣的:(线段树)