国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn(LCA思想)

2019-11-10 21:36:51
字體:
來源:轉載
供稿:網友

題目鏈接:http://codeforces.com/contest/697/PRoblem/C

【中文題意】給你一棵完全二叉樹,第一層為 1,第二層從左到右為2,3。依次往下…….一共有n個操作,有兩種操作。 第一種操作:1 u,v,w。將u到v之間的路徑上的每一條邊的值+w。 第二種操作:2 u,v。輸出從u到v之間的路徑上的邊的權值和。 【思路分析】首先對于完全二叉樹來說,1e18這個數據范圍太大,如果構建一棵這樣的二叉樹,不僅時間上會超過限制,而且空間上也會超過限制。所以呢,我們沒有必要把所有的結點都表示出來,只需用到哪個表示哪個即可。那么怎么更新路徑和查找路徑呢,更新路徑的話類似我們查找兩個結點的最近公共祖先,把結點的值存入map里面即可,另外一條邊的權值可以加在一個點上面,因為要查找邊肯定從點開始。 【AC代碼】

#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<queue>#include<stack>#include<map>#include<algorithm>using namespace std;#define LL long longmap<LL,LL >ma;int main(){ int n; while(~scanf("%d",&n)) { ma.clear(); int choice; for(int i=1;i<=n;i++) { scanf("%d",&choice); LL u,v,w; if(choice==1) { scanf("%lld %lld %lld",&u,&v,&w); while(u!=v) { if(u>v) { ma[u]+=w; u/=2; } else { ma[v]+=w; v/=2; } } } else { scanf("%lld%lld",&u,&v); LL re=0; while(u!=v) { if(u>v) { re+=ma[u]; u/=2; } else { re+=ma[v]; v/=2; } } printf("%lld/n",re); } } } return 0;}
上一篇:1004_Median

下一篇:遍歷Map的四種方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 达日县| 十堰市| 鄄城县| 佛坪县| 凤凰县| 沙坪坝区| 夏邑县| 上犹县| 社会| 黔江区| 勐海县| 堆龙德庆县| 兰溪市| 星子县| 桐柏县| 长阳| 东方市| 介休市| 揭阳市| 武威市| 辽阳市| 南漳县| 泽普县| 巨鹿县| 噶尔县| 井陉县| 稷山县| 阿拉善右旗| 奎屯市| 泾源县| 阿瓦提县| 延川县| 金溪县| 崇义县| 若尔盖县| 平阳县| 兖州市| 东山县| 兖州市| 马鞍山市| 建宁县|