当前位置:网站首页>EOJ 2021.10 E. XOR tree
EOJ 2021.10 E. XOR tree
2022-07-05 05:31:00 【solemntee】
Method 1 : First open a big pile . then d f s dfs dfs Again , Build a persistent dictionary tree , And each point throws the XOR maximum of itself and its ancestors into the heap . loop k k k Time , Each time the maximum value is ejected from the heap , Suppose the ejected point has been ejected x x x Time , Search the dictionary tree for its number x + 1 x+1 x+1 Large XOR value , Then throw it into the pile . Time complexity O ( 30 n + k ( l o g n + 30 ) ) O(30n+k(logn+30)) O(30n+k(logn+30))
1. This problem also reflects a skill, that is, to do the first k Great value (k< 1 e 6 1e6 1e6) The common method is to maintain a priority queue, get the maximum value each time, and then update .
2. The problem is no x All nodes can be persistent. The dictionary tree represents from the root to x The point group on the node chain Chengdu dictionary tree . Although in this way and query x The dictionary tree corresponding to the subtree of the node is equivalent , But in fact, this method can save one of tree chain partition when dealing with tree chain problem log
#include<bits/stdc++.h>
using namespace std;
struct
{
int vis[2];
int num;
}trie[30000005];
int tot;
int root[5000005];
int insert(int x,int rt)
{
int Root=++tot;
int now=root[rt];
for(int i=30;i>=0;i--)
/// This is determined according to the scope , The first one here is (1>>30) That is to say 2^31
{
int ch=(x>>i)&1;
trie[tot]=trie[now];
trie[tot].vis[ch]=tot+1;
trie[tot].num++;
now=trie[now].vis[ch];
tot++;
}
trie[tot]=trie[now];
trie[tot].num++;
return Root;
/// The reason for this is that it is convenient to build a tree root[x]=insert(a[x],i-1);
}
int query(int x,int k,int rt)
/// Inquire about x stay root[rt] The root of the persistent dictionary tree is XOR k Big
{
int now=root[rt];
int ans=0;
for(int i=30;i>=0;i--)
{
int ch=(x>>i)&1;
if(trie[trie[now].vis[!ch]].num>=k)
{
now=trie[now].vis[!ch];
ans|=(1<<i);
}
else
{
k-=trie[trie[now].vis[!ch]].num;
now=trie[now].vis[ch];
}
}
return ans;
}
struct node
{
int val,id,now;
bool operator < (const node &ths)const
{
if(val!=ths.val)return val<ths.val;
if(now!=ths.now)return now<ths.now;
return id<ths.id;
}
};
int dep[1000005],fa[1000005],a[1000005];
vector<int>v[1000005];
priority_queue<node>q;
void dfs(int x,int pre)
{
if(pre!=0)
{
dep[x]=dep[pre]+1;
fa[x]=pre;
q.push({
query(a[x],1,fa[x]),x,1});
}
root[x]=insert(a[x],pre);
for(auto to:v[x])if(to!=pre)
{
dfs(to,x);
}
}
vector<int>ans;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
int tu,tv;
scanf("%d%d",&tu,&tv);
v[tu].push_back(tv);
v[tv].push_back(tu);
}
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
dfs(1,0);
for(int i=1;i<=k;i++)
{
node p=q.top();
q.pop();
ans.push_back(p.val);
if(p.now<dep[p.id])q.push({
query(a[p.id],p.now+1,fa[p.id]),p.id,p.now+1});
}
for(auto x:ans)printf("%d\n",x);
return 0;
}
Method 2 : First create a persistent dictionary tree , Then two points k Great value , Then traverse all the dictionary trees violently to get the answer .
边栏推荐
- Haut OJ 1350: choice sends candy
- Web APIs DOM node
- A misunderstanding about the console window
- Control Unit 控制部件
- 26、 File system API (device sharing between applications; directory and file API)
- [speed pointer] 142 circular linked list II
- Animation scoring data analysis and visualization and it industry recruitment data analysis and visualization
- Developing desktop applications with electron
- sync.Mutex源码解读
- 一个新的微型ORM开源框架
猜你喜欢
一个新的微型ORM开源框架
[to be continued] [UE4 notes] L3 import resources and project migration
【Jailhouse 文章】Look Mum, no VM Exits
National teacher qualification examination in the first half of 2022
object serialization
Web APIs DOM节点
Solution to the palindrome string (Luogu p5041 haoi2009)
Web APIs DOM node
Yolov5 adds attention mechanism
第六章 数据流建模—课后习题
随机推荐
FVP和Juno平台的Memory Layout介绍
动漫评分数据分析与可视化 与 IT行业招聘数据分析与可视化
Acwing 4300. Two operations
搭建完数据库和网站后.打开app测试时候显示服务器正在维护.
Haut OJ 1243: simple mathematical problems
Haut OJ 1352: string of choice
TF-A中的工具介绍
Add level control and logger level control of Solon logging plug-in
Software test -- 0 sequence
Haut OJ 1221: a tired day
Light a light with stm32
【Jailhouse 文章】Look Mum, no VM Exits
Pointnet++ learning
质量体系建设之路的分分合合
GBase数据库助力湾区数字金融发展
记录QT内存泄漏的一种问题和解决方案
Solution to the palindrome string (Luogu p5041 haoi2009)
Palindrome (csp-s-2021-palin) solution
Haut OJ 1401: praise energy
软件测试 -- 0 序