01trie
!
fffefw
这个作者很懒,什么都没留下…
展开
-
hdu4825(01trie)
模板题题意就是给一个集合s,一个数,在集合里找到与该数异或值最大的数是多少#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;struct node{ int son[2],val; void reset() { son[0]=son[1]=val=0;...原创 2019-01-23 18:51:45 · 191 阅读 · 0 评论 -
hdu5536(01trie)
题意就是给一个集合,然后在集合里找到3个数,满足max (si+sj)⊕sk。 枚举i和j,然后把si,sj从字典树里删除,然后再在字典树里找与(si+sj)异或最大的数,取最大值,最后还要还原删除的数。删除 操作是话就是让字典树的节点额外记录一个值cnt,表示经过该节点的数次数。查询的时候,当该节点的cnt>1时才能走到该节点。#include<bits/std...原创 2019-01-23 18:59:46 · 206 阅读 · 0 评论 -
poj3764
题意就是给一棵树,然后让你求最大的路经异或和是多少,一条路径的异或和是该路径上的边对应的边权的异或和。 因为^具有自反性,即a^a=0,所以我们只需要dfs处理出根节点到每个点的路径的异或和dp[i],那么u至v的路径的异或和即等于 dp[u]^dp[v],然后把dp[i]都放入01字典树里,枚举起点i,求与dp[i]异或得到的最大的数,然后取最大值即可。#includ...原创 2019-01-23 22:32:39 · 512 阅读 · 0 评论 -
筱玛的迷阵探险(折半搜索+01字典树)
直接dfs会t,要用折半搜索,先从起点搜到对角线位置的格子,然后在对角线的格子建01字典树,完了之后再从重点往对角线搜,搜到就在对应格子的01字典树里查询一下,然后取最大就行#include<bits/stdc++.h>using namespace std;#define ll long longint mp[25][25],d[4][2]={0,1,1,0,0,-1...原创 2019-04-11 19:35:09 · 114 阅读 · 1 评论