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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射

發布時間:2025/4/5 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 題目分析
    • 題目鏈接

題目分析



來源:acwing
分析:

和下面這道題幾乎是同一題:PAT甲級1143 Lowest Common Ancestor (30 分):[C++題解]LCA、最低公共祖先
這道題先是根據給定的中序遍歷和先序遍歷,建樹。
建樹的時候需要用到點的深度每個點的父節點是什么。

然后是找LCA,有很多優秀的算法,這里使用樸素做法,O(n)復雜度。思想是:兩個結點a和b,深度深的往上等于它的父節點;如果兩者位于同一層,任意一個往上走等于它的父親,直到兩者相等。相等時就是最低公共祖先。

while( a != b){if(depth[a] < depth[b]) b =p[b];else a = p[a]; }

本題需要注意的使用哈希表pos映射進行離散化到0~n-1,seq數組記錄映射之前的數。因為題目給的數據是int范圍內的,不離散化查找容易超時。離散化代碼:

//讀入中序for(int i = 0; i< n; i++) {cin >> seq[i]; //讀入中序pos[seq[i]] =i; //保存中序序列映射后的值in[i] =i; //中序遍歷映射到0~n-1}//讀入前序for(int i = 0; i<n; i++) {cin >> pre[i];pre[i] = pos[pre[i]]; //前序遍歷進行映射}

ac代碼

#include<bits/stdc++.h> using namespace std; const int N = 10010;int in[N],pre[N],seq[N]; int n, m; unordered_map<int,int> pos; int p[N],depth[N];//根據中序遍歷和前序遍歷建樹 int build( int il ,int ir ,int pl ,int pr ,int d){int root = pre[pl];int k = root;depth [root] = d;if(il < k) p[build(il , k -1 , pl+1, pl+1 + k -1 -il , d+1)] = root;if( k< ir) p[build(k+1,ir ,pl+ k - il+1, pr,d+1)] =root ;return root; }int main(){cin >> m >> n;//讀入中序for(int i = 0; i< n; i++) {cin >> seq[i];pos[seq[i]] =i;in[i] =i; //中序遍歷映射到0~n-1}//讀入前序for(int i = 0; i<n; i++) {cin >> pre[i];pre[i] = pos[pre[i]];}build( 0, n-1, 0, n-1, 0);while(m--){int a, b;cin >> a >> b;if(pos.count(a) && pos.count(b)){a =pos[a],b= pos[b];int x =a, y =b;while(a != b){if(depth[a] > depth[b]) a =p[a];else b=p[b];}if(a != x && b!= y) printf("LCA of %d and %d is %d.\n",seq[x],seq[y],seq[a]);else if(a == x) printf("%d is an ancestor of %d.\n",seq[a],seq[y]);else printf("%d is an ancestor of %d.\n",seq[a],seq[x]);}else if(pos.count(a) == 0 && pos.count(b) ==0) printf("ERROR: %d and %d are not found.\n",a,b);else if(pos.count(a) ==0)printf("ERROR: %d is not found.\n",a);else printf("ERROR: %d is not found.\n",b);} }

題目鏈接

PAT甲級1151 LCA in a Binary Tree (30 分)
https://www.acwing.com/problem/content/1646/

總結

以上是生活随笔為你收集整理的PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中国女人真人一级毛片 | 男女一区 | 久久久久夜 | 中日韩av电影| 蜜桃久久一区二区三区 | 色爱av综合网 | 日本黄动漫 | 超碰影院在线 | 欧美激情 国产精品 | 好男人www社区 | 99精品一级欧美片免费播放 | 一本免费视频 | 国产又粗又猛又色 | 伊人久久免费视频 | 亚洲欧美国产高清 | 日本欧美一区 | 欧美成人影院 | 顶臀精品视频www | 日韩有码av| 善良的女邻居在线观看 | 日日夜夜操av | 一级黄色在线观看 | 熟女性饥渴一区二区三区 | 亚洲精品视频在线播放 | 僵尸叔叔在线观看国语高清免费观看 | 亚洲黄片一区二区三区 | 永久黄网站色视频免费观看w | 国产凹凸一区二二区 | 日韩成人免费在线视频 | 波多野结衣高清电影 | 日本黄色片段 | 伊人久久免费视频 | 亚洲草逼视频 | 岛国精品资源网站 | 国产妇女馒头高清泬20p多 | 国产美女作爱视频 | 天天综合天天做 | 中文字幕在线观看视频免费 | 国产日韩精品在线观看 | 男女视频在线免费观看 | 奇米第四色7777 | 亚洲88av| 午夜精品视频 | 欧美一级在线播放 | 欧美午夜三级 | 日韩一级视频在线观看 | 双性皇帝高h喷汁呻吟 | 欧美日韩国产在线观看 | 午夜在线免费观看 | 久久久精品视频免费 | 国产精选久久久 | 日韩精品视频在线观看免费 | 综合伊人av| 精品久久一区二区 | 中文字幕丝袜诱惑 | 午夜剧场免费观看 | 日韩久久在线 | 在线射| 丁香六月五月婷婷 | 久久刺激 | 亚洲欧美视频在线 | 五月天激情在线 | 欧美成人黄 | 韩日毛片 | 亚洲欧美日韩国产一区二区 | 日韩人妻精品无码一区二区三区 | 九九九免费视频 | 成人综合站 | av在线资源站 | 好色综合 | 欧美亚洲国产视频 | 成人音影| 茄子视频色 | 色婷婷六月天 | 在线看黄的网站 | 国产激情无套内精对白视频 | 97综合| 欧美老熟妇又粗又大 | 日本视频免费在线播放 | 正在播放超嫩在线播放 | 97视频播放| 999久久久免费精品国产 | 相亲对象是问题学生在线观看 | 日av一区| 男人的天堂avav | 波多野结衣啪啪 | 四虎精品久久 | 成人免费无遮挡无码黄漫视频 | 18男女无套免费视频 | 人人妻人人澡人人爽人人dvd | 亚洲码无人客一区二区三区 | 久久99精品国产91久久来源 | 日本aⅴ视频 | 成人午夜影院 | 色爱色| 污动漫网站 | 亚洲熟女一区 | 久久久久亚洲av片无码下载蜜桃 | 亚洲美女在线视频 |