題目描述
給定一棵 n 個點的帶權樹,結點下標從 1 開始到 n 。尋找樹中找兩個結點,求最長的異或路徑。
異或路徑指的是指兩個結點之間唯一路徑上的所有邊權的異或。
洛谷:4551 最長異或路徑
思路,首先dfs處理出每個點到 根 的距離
然後將這些距離存在字典樹中,然後對於每個距離查詢字典樹,得到最優值
注意:字典樹一維空間大小。
#includeusing namespace std;
const int m=1e5+50;
struct nodee[m<<1];
int n,head[m<<1],res,tot,cnt,t[m*35][5],xo[m];
void add(int x,int y,int v)
void dfs(int x,int fa)
}void build(int x)
}int query(int x)
return ans;
}int main()
奶牛異或(01字典樹)
題意 讓你找乙個連續區間異或和最大,如果有相同的,則輸出斷點較小的。題解 01字典樹,利用字首和的思想進行求解,我們在插入字首的同時,也在不斷的更新最大值。我們查詢當前 二進位制字串與已經插入的 二進位制字串中的哪乙個異或和最大?找到最大的那個,讀取這個字首和是到誰結束的,來判斷是否要更新 keep...
最長異或值路徑 字典樹應用
任何新型別的題,都可以轉換成自己熟悉的題來解答。就像下面的這題 給定乙個樹,樹上的邊都具有權值。樹中一條路徑的異或長度被定義為路徑上所有邊的權值的異或和 為異或符號。給定上述的具有n個節點的樹,你能找到異或長度最大的路徑嗎?輸入格式 第一行包含整數n,表示樹的節點數目。接下來n 1行,每行包括三個整...
COJ 1216 異或最大值 01字典樹
題意 求n個非負數中任意2個的異或值的最大值。n數量級為10 5 分析 直接暴力肯定超時了。乙個非負整數可以看成1個32位的01字串,n個數可以看成n個字串,因此可以建立字典樹,建好樹後,對於任意非負整數x,可以沿著樹根往下貪心找到y,使得x異或y最大,複雜度為樹的深度。view code incl...