日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P4551 最长异或路径

發(fā)布時(shí)間:2024/9/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P4551 最长异或路径 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

給定一棵?nn?個(gè)點(diǎn)的帶權(quán)樹,結(jié)點(diǎn)下標(biāo)從?11?開始到?NN?。尋找樹中找兩個(gè)結(jié)點(diǎn),求最長的異或路徑。

異或路徑指的是指兩個(gè)結(jié)點(diǎn)之間唯一路徑上的所有節(jié)點(diǎn)權(quán)值的異或。

輸入輸出格式

輸入格式:

?

第一行一個(gè)整數(shù)?NN?,表示點(diǎn)數(shù)。

接下來?n-1n?1?行,給出?u,v,wu,v,w?,分別表示樹上的?uu?點(diǎn)和?vv?點(diǎn)有連邊,邊的權(quán)值是?ww?。

?

輸出格式:

?

一行,一個(gè)整數(shù)表示答案。

?

輸入輸出樣例

輸入樣例#1:?
4 1 2 3 2 3 4 2 4 6 輸出樣例#1:?
7

說明

最長異或序列是1-2-3,答案是 7 (=3 ⊕ 4)

數(shù)據(jù)范圍

1\le n \le 100000;0 < u,v \le n;0 \le w < 2^{31}1n100000;0<u,vn;0w<2^31

?

?

? ? 為什么不叫trie樹模板題呢???

? ? 練練板子hhhh

?

#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=100005; int ci[35],n,m,Xor[maxn],c=0,ch[maxn*57][2],R=0,A=0; int to[maxn*2],ne[maxn*2],val[maxn*2],num,hd[maxn]; inline void add(int x,int y,int z){ to[++num]=y,ne[num]=hd[x],hd[x]=num,val[num]=z;}inline void Ins(int x){int now=R;for(int i=30,u;i>=0;i--){u=(ci[i]&x)?1:0;if(!ch[now][u]) ch[now][u]=++c;now=ch[now][u];} }int F(int x){int now=R,an=0;for(int i=30,u;i>=0;i--){u=(ci[i]&x)?0:1;if(ch[now][u]) an+=ci[i],now=ch[now][u];else now=ch[now][u^1];}return an; }void dfs(int x,int fa){A=max(A,F(Xor[x])),Ins(Xor[x]);for(int i=hd[x];i;i=ne[i]) if(to[i]!=fa){Xor[to[i]]=Xor[x]^val[i];dfs(to[i],x);} }int main(){ci[0]=1;for(int i=1;i<=30;i++) ci[i]=ci[i-1]<<1;scanf("%d",&n);int uu,vv,ww;for(int i=1;i<n;i++) scanf("%d%d%d",&uu,&vv,&ww),add(uu,vv,ww),add(vv,uu,ww);dfs(1,-1);printf("%d\n",A);return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/JYYHH/p/9026855.html

總結(jié)

以上是生活随笔為你收集整理的洛谷 P4551 最长异或路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。