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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

3764树上的异或值(自己研究的静态字典树)

發(fā)布時間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3764树上的异或值(自己研究的静态字典树) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 給一顆樹,最多10W個點,然后每條邊上都有一個權(quán)值,任意兩點的權(quán)值是他們經(jīng)過的邊的異或值,問最大的權(quán)值是多少?(任意兩點中最大的)


思路:

? ? ? 首先突破口是要想到a^b=c^a ^c^b,那么任意兩點的異或值就可以是他們到根節(jié)點的異或然后異或一下,so先把所有點到根節(jié)點的異或值求出來,這個好求,然后就是相當(dāng)于給你n個值,讓你在里面選擇兩個值異或起來最大,這個也是比較有意思的(之前做過這個問題),我們直接把所有數(shù)字都弄成31位的二進(jìn)制數(shù),高位在前面,這樣就得到了n個31位的字符串,然后把他們?nèi)技拥阶值錁淅?#xff0c;加完后在開始查詢,貪心的去查,因為先遇到的是高位,所以可以簡單順序貪心,細(xì)節(jié)不說了,自己想想,很容易想出來。還有就是這個題目一開始我用的動態(tài)字典樹,結(jié)果超時了,看到有人說得用靜態(tài)字典樹,沒寫過靜態(tài)的,就自己嘗試著寫了個類似線段樹的字典樹,結(jié)果爆內(nèi)存了,然后我就想,動態(tài)字典樹超時的原因就是在malloc這個地方唄,那我就實現(xiàn)開好一堆結(jié)構(gòu)體,等到改分配內(nèi)存的時候就從里面拿出來一個給字典樹就行了,結(jié)果交上去就直接AC了,雖然還沒寫過靜態(tài)的字典樹,也不知道哪個該怎么寫,不過感覺事先開好,然后分配的時候id+1拿出來也能解決動態(tài)的超時問題,以后超時就這樣寫吧,但是有一點,這個數(shù)組要開多大這個不好算,所以為了安全起見盡可能的大就行了。

#include<stdio.h> #include<stdlib.h> #include<string.h>#define N_node 100005 #define N_edge 200010typedef struct {int to ,next,cost; }STAR;typedef struct Tree {Tree *next[2]; }Tree;STAR E[N_edge]; int list[N_node] ,tot; int XOR[N_node]; int mark[N_node]; char str[N_node][35]; Tree T[N_node * 50]; int nowT; Tree root;void add(int a ,int b ,long long c) {E[++tot].to = b;E[tot].cost = c;E[tot].next = list[a];list[a] = tot; }void DFS(int x ,long long nowxor) {mark[x] = 1;XOR[x] = nowxor;for(int k = list[x] ;k ;k = E[k].next){if(!mark[E[k].to])DFS(E[k].to ,nowxor^E[k].cost);}return ; }void BuidTree(char *str) {Tree *p = &root ,*q;for(int i = 0 ;i <= 30 ;i ++){int id = str[i];if(p -> next[id] == NULL){q = &T[++nowT];q -> next[0] = q -> next[1] = NULL;p -> next[id] = q;p = p -> next[id];}else p = p -> next[id];} }int Query(char *str) {Tree *p = &root;int ans = 0;for(int i = 0 ;i <= 30 ;i ++){int id = str[i] ^ 1;if(p -> next[id] == NULL) p = p -> next[id^1];else{p = p -> next[id];ans += (1 << (30 - i));}}return ans; }int main () {int n ,a ,b ,c ,i ,j;while(~scanf("%d" ,&n)){memset(list ,0 ,sizeof(list));tot = 1;for(i = 1 ;i < n ;i ++){scanf("%d %d %d" ,&a ,&b ,&c);add(a + 1 ,b + 1 ,c);add(b + 1 ,a + 1 ,c);}memset(mark ,0 ,sizeof(mark));DFS(1 ,0);root.next[0] = root.next[1] = NULL;nowT = 0;for(i = 1 ;i <= n ;i ++){for(j = 0 ;j <= 30 ;j ++){str[i][j] = (((1 << (30 - j)) & XOR[i]) != 0);}BuidTree(str[i]);}int max = 0;for(i = 1 ;i <= n ;i ++){int tmp = Query(str[i]);if(max < tmp) max = tmp;}printf("%d\n" ,max);}return 0; }


總結(jié)

以上是生活随笔為你收集整理的3764树上的异或值(自己研究的静态字典树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色三级免费观看 | 天天操天天射天天 | 佐佐木明希电影 | 天天色天天射天天干 | 国产乱论视频 | 美女被草网站 | 黄色免费在线观看视频 | 国产又粗又黄又爽 | 在线观看免费视频黄 | 亚洲av片一区二区三区 | 天天躁夜夜躁狠狠躁 | 午夜精品福利一区二区蜜股av | 国产在线观看黄 | 欧美不卡三区 | 奇米网一区二区 | 香蕉视频91| 欧美色图片区 | 女的高潮流时喷水图片大全 | a少妇| 一边吃奶一边摸做爽视频 | 嫩草免费视频 | 亚洲最大看欧美片网站 | 日韩黄色一级视频 | 综合网av| 9l蝌蚪porny中文自拍 | 久久艹国产精品 | 成人做爰黄 | 国产精品无码网站 | 国产精品推荐 | 中文字幕亚洲视频 | 奇米影视第4色 | 一区二区三区四区五区在线视频 | 国产在线天堂 | 都市激情亚洲 | 秒拍福利视频 | 日本99视频 | 女生脱裤子让男生捅 | 好紧好爽再浪一点视频 | 大j8福利视频导航 | 国产四区| 久久久视屏 | 久久综合一区二区三区 | 黄色亚洲网站 | 69久久久久久 | 天堂网在线中文 | 日本少妇吞精囗交 | 免费又黄又爽又猛大片午夜 | 国产黄色三级网站 | 丁香花电影高清在线阅读免费 | 午夜影院一区二区三区 | 中文字幕一区二区人妻痴汉电车 | 女生张开腿让男生插 | 懂色av蜜臀av粉嫩av喷吹 | 日本视频中文字幕 | 欧美成人精品一区二区免费看片 | 中文字幕精品亚洲 | 四虎影视免费永久大全 | 成年人免费观看视频网站 | 91免费短视频 | 美女啪啪网站 | 欧美日韩国产综合在线 | 久久国产经典 | 国产精品免费一区二区三区在线观看 | 香蕉久久一区二区三区 | 在线无| 91国在线视频| 久久午夜夜伦鲁鲁片无码免费 | 精品在线免费观看视频 | 成人免费午夜视频 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 一级黄色网 | 国产婷婷色一区二区三区 | 成人理论影院 | 天天躁日日躁bbbbb | 强制憋尿play黄文尿奴 | 久久av高潮av无av萌白 | 91麻豆精品在线观看 | 视色在线 | 在线观看成年人网站 | 快播91| 久久av高潮av无av萌白 | 少妇脱了内裤让我添 | 日韩在线观看一区二区 | 色www亚洲国产张柏芝 | 少妇特黄a一区二区三区88av | 国产精品宾馆在线精品酒店 | 日韩区在线观看 | 老司机激情视频 | 天天爽夜夜爽夜夜爽 | 波多野结衣50连登视频 | 亚洲特级毛片 | 国产三级a | 亚洲av无码一区二区三区观看 | 欧美人与性禽动交精品 | 嫩草在线观看 | 欧美色图校园春色 | 日韩欧美影院 | 日本精品少妇 | 东京热无码av一区二区 |