Xor Tree CodeForces

Posted acmloser

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xor Tree CodeForces相关的知识,希望对你有一定的参考价值。

原题链接
考察:Trie+dfs
思路:
  将每个数插入Trie中,可以发现如果子树的结点>=2,那么这些结点会内部连接,也就是说:如果左子树和右子树的结点都>=2,那么它们就是割裂的,我们需要删除一些点使得它们连接.
  最少删除数 = 最大保留数.对于当前树u, 最大保留数
:f[u] =max(f[左],f[右])+1,如果我们要保证连接左子树和右子树有一个只能保存一个结点,所以是保留最大结点数+1.

Code

#include <iostream> 
#include <cstring>
using namespace std;
const int N = 200010;
int son[N*32][2],idx,n;
void insert(int x)
{
	int p = 0;
	for(int i=31;i>=0;i--)
	{
		int a = x>>i&1;
		if(!son[p][a]) son[p][a] = ++idx;
		p = son[p][a];
	}
}
int dfs(int u)
{
	if(!son[u][0]&&!son[u][1]) return 1;//叶子节点
	if(!son[u][0]) return dfs(son[u][1]);
	if(!son[u][1]) return dfs(son[u][0]);
	return max(dfs(son[u][1]),dfs(son[u][0]))+1;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		insert(x);
	}
	printf("%d\\n",n-dfs(0));
	return 0;
}

以上是关于Xor Tree CodeForces的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1006 F - Xor-Paths

Codeforces 984 D - XOR-pyramid

codeforces#983 B. XOR-pyramid (dp)

Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法

Codeforces 862C - Mahmoud and Ehab and the xor

Codeforces 242E. XOR on Segment (二维线段树 lazy操作 xor)