#include #include #include using namespace std; const int maxn=100005; int n,mx;//n个节点,最大值 int trie[maxn*32][2],tot;//字典树存储的是01位 int head[maxn],dx[maxn],cnt;//头结点,从根到当前节点所有边权的xor值 struct Edge { int to,w,next; }e[maxn<<1]; void add(int u,int v,int w) { e[++cnt].to=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt; } void dfs(int u,int f)//求dx,从根到当前节点所有边权的xor值 { for(int i=head[u];i;i=e[i].next) { int v=e[i].to,w=e[i].w; if(v==f)//父节点 continue; dx[v]=dx[u]^w; dfs(v,u); } } void insert(int num) { int p=1; for(int i=30;i>=0;i--) { bool k=num&(1<=0;i--) { bool k=num&(1<