找到兩個點之間的路權值異或和最大。
將無根樹扯成有根樹,將根節點到每個葉子節點的路徑異或權值處理出來存起來,然後我們可以遍歷取max,因為從根節點到兩個葉子節點的值異或起來會把中間重複路徑的異或權值消去(異或的性質,相同異或為0),所以借助trie樹就可以了。
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
1e6+10;
int trie[maxn][2
];int a[maxn]
,e[maxn]
,nxt[maxn]
,h[maxn]
,c[maxn]
,tot,cnt,n;
void
add(
int u,
int v,
int w)
void
dfs(
int u,
int fa,
int sum)
}void
insert
(int x)
}int
search
(int x)
else
}return res;
}int
main()
dfs(0,
-1,0
);for(
int i=
1;i)insert
(a[i]);
int ans =0;
for(
int i=
1;i) cout<
}
Acwing 144 最長異或值路徑
144.最長異或值路徑 給定乙個樹,樹上的邊都具有權值。樹中一條路徑的異或長度被定義為路徑上所有邊的權值的異或和 為異或符號。給定上述的具有n個節點的樹,你能找到異或長度最大的路徑嗎?輸入格式 第一行包含整數n,表示樹的節點數目。接下來n 1行,每行包括三個整數u,v,w,表示節點u和節點v之間有一...
AcWing 144 最長異或值路徑(Trie)
題目大意 一棵樹,邊有權值。現在定義路徑的值為路徑中邊的權值的異或值,求異或值最大的路徑。題解 從a到b路徑的異或值 a到根結點的異或值 b到根結點的異或值。這樣求出每個點到根結點的異或值,然後從n個數中選出異或值最大的數就可以。把n個數插入trie樹中做。include include inclu...
最長異或值路徑 字典樹應用
任何新型別的題,都可以轉換成自己熟悉的題來解答。就像下面的這題 給定乙個樹,樹上的邊都具有權值。樹中一條路徑的異或長度被定義為路徑上所有邊的權值的異或和 為異或符號。給定上述的具有n個節點的樹,你能找到異或長度最大的路徑嗎?輸入格式 第一行包含整數n,表示樹的節點數目。接下來n 1行,每行包括三個整...