最長異或路徑

2022-05-07 19:18:07 字數 778 閱讀 7133

題目鏈結

戳我前置知識

什麼是異或? -----如果二進位制下同一位不相同,則為\(1\),否則為\(0\)

trie樹

基本位運算

對於同一條邊異或兩次,相當於沒有進行異或,我們將dis[i]表示為從i點到根節點的路徑異或和。則問題轉化為了求兩點的dis異或最大值

貪心的想,對於乙個數x,我們對於dis[i]^x最大,則每次往x相反的值選。

及如果x這一位是1,我們在trie樹上往0跑,反之往1跑。這樣的一定是最大的。

code

#include#define int ll

#define rg register

#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);

using namespace std;

typedef long long ll;

const int n=1000010;

int read()

int dis[n],head[n],cnt,tot=1;

struct node b[n<<1];

void dfs(int x,int fa)

}void add(int x,int y,int v)

struct node1 a[n<<2];

void build(int x)

}int find(int x)

return ans;

} main()

最長異或路徑 trie樹 題解

題意 給你一棵樹,有邊權,定義兩點之間的價值為這連線兩點的這條路徑上所有邊權的異或和,如1 2 1 rightarrow 2 1 2所經過的邊權為1,2 31,2,3 1,2,3,那麼1 2 1 rightarrow 2 1 2的權值就為1 2 3 3 1 bigoplus2 bigoplus3 3...

Luogu4551 最長異或路徑

emmmmmmmmmm異或乙個數兩次等於沒有操作對吧。所以我們按照字首的異或和,建乙個01trie。然後之後。直接在樹上貪心地找能和它每一位不一樣的數。然後。就沒有了吧qwqwq 如下 include include include include include define maxn 10001...

Acwing 144 最長異或值路徑

144.最長異或值路徑 給定乙個樹,樹上的邊都具有權值。樹中一條路徑的異或長度被定義為路徑上所有邊的權值的異或和 為異或符號。給定上述的具有n個節點的樹,你能找到異或長度最大的路徑嗎?輸入格式 第一行包含整數n,表示樹的節點數目。接下來n 1行,每行包括三個整數u,v,w,表示節點u和節點v之間有一...