这道题我由于智障错误导致一直错。

在树上建主席树,加上lca思想,很简单。

 #include<bits/stdc++.h>
using namespace std;
const int N=;
struct node
{
int to,nex;
}e[N<<];
struct tree
{
int l,r,s;
}t[];
int n,m,cnt,cn,mx,pre,head[N],f[N][],a[N],rt[N],d[N];
vector<int>v;
inline int get(int x){return lower_bound(v.begin(),v.end(),x)-v.begin()+;}
void add(int x,int y)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;
}
void update(int &x,int l,int r,int p,int num)
{
x=++cn;t[x]=t[p];t[x].s++;int mid=l+r>>;
if(l==r)return ;
if(mid>=num)update(t[x].l,l,mid,t[p].l,num);
else update(t[x].r,mid+,r,t[p].r,num);
}
void dfs(int x,int fa)
{
update(rt[x],,mx,rt[fa],get(a[x]));f[x][]=fa;d[x]=d[fa]+;
for(int i=;i<=;++i)
if(d[x]>=(<<i))
f[x][i]=f[f[x][i-]][i-];
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(y==fa)continue;
dfs(y,x);
}
}
int lca(int x,int y)
{
if(d[x]<d[y])swap(x,y);
int tmp=d[x]-d[y];
for(int i=;i>=;i--)
if(tmp&(<<i))x=f[x][i];
for(int i=;i>=;i--)
{
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
}
return x==y?x:f[x][];
}
int query(int l,int r,int rt1,int rt2,int rt3,int rt4,int k)
{
if(l==r){
pre=v[l-];return l;
}
int sum=t[t[rt1].l].s+t[t[rt2].l].s-t[t[rt3].l].s-t[t[rt4].l].s;
int mid=(l+r)>>;
if(sum>=k)return query(l,mid,t[rt1].l,t[rt2].l,t[rt3].l,t[rt4].l,k);
else return query(mid+,r,t[rt1].r,t[rt2].r,t[rt3].r,t[rt4].r,k-sum);
}
int main()
{
//freopen("rand.out","r",stdin);
//freopen("my.out","w",stdout);
int x,y,k;
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);v.push_back(a[i]);
}
sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());mx=v.size();
for(int i=;i<n;++i)
{
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
dfs(,);
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&k);
int z=lca(pre^x,y);
printf("%d",v[query(,mx,rt[pre^x],rt[y],rt[z],rt[f[z][]],k)-]);
if(i<m) puts("");
}
return ;
}

BZOJ最后换行会PE。。。。

主席树+dfs SPOJ BZOJ2588 Count on a tree的更多相关文章

  1. 【BZOJ2588】Spoj 10628. Count on a tree 主席树+LCA

    [BZOJ2588]Spoj 10628. Count on a tree Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lasta ...

  2. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  3. BZOJ 2588: Spoj 10628. Count on a tree 树上跑主席树

    2588: Spoj 10628. Count on a tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/J ...

  4. 洛谷P2633/bzoj2588 Count on a tree (主席树)

    洛谷P2633/bzoj2588 Count on a tree 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K ...

  5. BZOJ2588 Count on a tree 【树上主席树】

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MB Submit: 7577  Solved: 185 ...

  6. Bzoj 2588: Spoj 10628. Count on a tree 主席树,离散化,可持久,倍增LCA

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2588 2588: Spoj 10628. Count on a tree Time Limit ...

  7. BZOJ 2588: Spoj 10628. Count on a tree( LCA + 主席树 )

    Orz..跑得还挺快的#10 自从会树链剖分后LCA就没写过倍增了... 这道题用可持久化线段树..点x的线段树表示ROOT到x的这条路径上的权值线段树 ----------------------- ...

  8. Bzoj 2588 Spoj 10628. Count on a tree(树链剖分LCA+主席树)

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MB Description 给定一棵N个节点的树,每个点 ...

  9. bzoj 2588 Spoj 10628. Count on a tree (可持久化线段树)

    Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 7669  Solved: 1894[Submi ...

随机推荐

  1. 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信

    [题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...

  2. 正则表达式:Python 模块 re 简介

    为了使文章更具可读性,本文将正则表达式冗长的 语法介绍 放在了文章的末尾. 一.正则表达式简介 正则表达式(RegExp)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(元字符 ...

  3. maven使用过程中遇到的问题总汇

    1:web.xml is missing and <failOnMissingWebXml> is set to true 造成原因: 使用maven创建项目时有时在pom.xml的war ...

  4. 简易安装sqoop

    版本 :hive-0.13.1-cdh5.3.6.tar.gz 1:解压 然后 进到 conf 目录 修改 sqoop-env.sh   2:如果使用mysql 数据库 要将 mysql驱动包拷贝到 ...

  5. 面试整理(2)跨域:jsonp与CORS

    问题:跨域有哪些方法?jsonp的原理是什么? jsonp: 先说jsonp,jsonp的主要原理是利用script标签的src可以跨域请求,据说有src属性的都可以跨域请求,但script标签返回的 ...

  6. 黑色的网站后台管理系统ui界面——后台

    链接:http://pan.baidu.com/s/1pLffwE3 密码:m4v6

  7. PHP深浅拷贝

    举个栗子: <?php class Example1 { public $name; public function __construct($name) { $this->name = ...

  8. Mac nginx 配置

    nginx 安装: 在苹果系统下如果要安装nginx,首先要安装brew.安装brew可以查看网站:https://brew.sh: 一条命令即可搞定:/usr/bin/ruby -e "$ ...

  9. HDU 6195 2017沈阳网络赛 公式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6195 题意:有M个格子,有K个物品.我们希望在格子与物品之间连数量尽可能少的边,使得——不论是选出M个 ...

  10. VI编辑,配置文件

    1,VI编辑 vi 分为3种模式 1>一般模式: [Ctrl + f  ]         下一页 [Ctrl + b ]         上一页 [n+ enter]  向下移动n行 eg:2 ...