洛谷P4114 Qtree1(樹鏈剖分+線段樹)

傳送門

?

LCT秒天秒地用什么樹剖

這題可以算是樹剖的比較裸的題目了

把每一條邊的權值下放到他兩邊的點中深度較深的那個

然后直接用樹剖+線段樹帶進去亂搞就可以了

  1 //minamoto
  2 #include<bits/stdc++.h>
  3 using namespace std;
  4 template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
  5 inline int read(){
  6     #define num ch-'0'
  7     char ch;bool flag=0;int res;
  8     while(!isdigit(ch=getchar()))
  9     (ch=='-')&&(flag=true);
 10     for(res=num;isdigit(ch=getchar());res=res*10+num);
 11     (flag)&&(res=-res);
 12     #undef num
 13     return res;
 14 }
 15 char sr[1<<21],z[20];int C=-1,Z;
 16 inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
 17 inline void print(int x){
 18     if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;
 19     while(z[++Z]=x%10+48,x/=10);
 20     while(sr[++C]=z[Z],--Z);sr[++C]='\n';
 21 }
 22 const int N=1e5+5;
 23 int head[N],Next[N<<1],ver[N<<1],edge[N<<1],tot=1;
 24 inline void add(int u,int v,int e){
 25     ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
 26 }
 27 int val[N],num[N],son[N],sz[N],fa[N],dep[N],top[N],dfn[N],cnt;
 28 int n;
 29 void dfs1(int u){
 30     sz[u]=1,dep[u]=dep[fa[u]]+1;
 31     for(int i=head[u];i;i=Next[i]){
 32         int v=ver[i];
 33         if(v!=fa[u]){
 34             fa[v]=u,num[i>>1]=v,dfs1(v),sz[u]+=sz[v];
 35             if(sz[son[u]]<sz[v]) son[u]=v;
 36         }
 37     }
 38 }
 39 void dfs2(int u,int t){
 40     top[u]=t,dfn[u]=++cnt;
 41     if(son[u]){
 42         dfs2(son[u],t);
 43         for(int i=head[u];i;i=Next[i]){
 44             int v=ver[i];
 45             if(v!=fa[u]&&v!=son[u]) dfs2(v,v);
 46         }
 47     }
 48 }
 49 int mx[N<<2];
 50 #define ls (p<<1)
 51 #define rs (p<<1|1)
 52 inline void upd(int p){mx[p]=max(mx[ls],mx[rs]);}
 53 void build(int p,int l,int r){
 54     if(l==r) return (void)(mx[p]=val[l]);
 55     int mid=(l+r)>>1;
 56     build(ls,l,mid),build(rs,mid+1,r);
 57     upd(p);
 58 }
 59 int query(int p,int l,int r,int ql,int qr){
 60     if(ql<=l&&qr>=r) return mx[p];
 61     int mid=(l+r)>>1,res=0;
 62     if(ql<=mid) cmax(res,query(ls,l,mid,ql,qr));
 63     if(qr>mid) cmax(res,query(rs,mid+1,r,ql,qr));
 64     return res;
 65 }
 66 void update(int p,int l,int r,int x){
 67     if(l==r) return (void)(mx[p]=val[l]);
 68     int mid=(l+r)>>1;
 69     x<=mid?update(ls,l,mid,x):update(rs,mid+1,r,x);
 70     upd(p);
 71 }
 72 inline void change(int i,int t){
 73     val[dfn[num[i]]]=t,update(1,1,n,dfn[num[i]]);
 74 }
 75 int query_path(int u,int v){
 76     if(u==v) return 0;
 77     int res=0;
 78     while(top[u]!=top[v]){
 79         if(dep[top[u]]<dep[top[v]]) swap(u,v);
 80         cmax(res,query(1,1,n,dfn[top[u]],dfn[u]));
 81         u=fa[top[u]];
 82     }
 83     if(u==v) return res;
 84     if(dep[u]<dep[v]) swap(u,v);
 85     cmax(res,query(1,1,n,dfn[son[v]],dfn[u]));
 86     return res;
 87 }
 88 char s[15];int a,b;
 89 int main(){
 90 //    freopen("testdata.in","r",stdin);
 91     n=read();
 92     for(int i=1,u,v,e;i<n;++i)
 93     u=read(),v=read(),e=read(),add(u,v,e),add(v,u,e);
 94     dfs1(1),dfs2(1,1);
 95     for(int i=1;i<n;++i) val[dfn[num[i]]]=edge[i<<1];
 96     build(1,1,n);
 97     while(true){
 98         scanf("%s",s);if(s[0]=='D') break;
 99         if(s[0]=='C') a=read(),b=read(),change(a,b);
100         else a=read(),b=read(),print(query_path(a,b));
101     }
102     Ot();
103     return 0;
104 }

?

轉載于:https://www.cnblogs.com/bztMinamoto/p/9792785.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451009.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是CDN ,CDN的作用

轉自&#xff1a;https://baike.baidu.com/item/CDN/420951?fraladdin 簡介 CDN是構建在網絡之上的內容分發網絡&#xff0c;依靠部署在各地的邊緣服務器&#xff0c;通過中心平臺的負載均衡、內容分發、調度等功能模塊&#xff0c;使用戶就近獲取所需內容&#xff0c;降低網…

docker 中不能用vim編輯文件

2019獨角獸企業重金招聘Python工程師標準>>> docker 中不能用vim編輯文件 2017年08月28日 16:54:29 閱讀數&#xff1a;2061 更新來源 apt-get update 1安裝vim apt-get install -y vim 轉載于:https://my.oschina.net/u/3367404/blog/1923901

使用final修飾局部變量???

在編程中我們偶爾會看到如下的代碼&#xff1a; public void foo(final int arg){final int localData 0;// ...}以及與之相似的代碼 public void foo(int arg){int localData 0;// ...}這兩段代碼的主要區別就是&#xff1a;局部變量是否使用了final關鍵字修飾。有同學可能會…

視頻編解碼概述

視頻編解碼概述 1. 常用的基本知識 基本概念 編解碼 編解碼器&#xff08;codec&#xff09;指的是一個能夠對一個信號或者一個數據流進行變換的設備或者程序。這里指的變換既包括將信號或者數據流進行編碼&#xff08;通常是為了傳輸、存儲或者加密&#xff09;或者提取得到…

洛谷 2759 奇怪的函數

【題解】 取個對數然后二分即可。對于一個數x&#xff0c;x^x的位數就是(int)(lg(x)*x1). 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<cmath>5 #define LL long long6 #define rg register7 #define N 2000108 using name…

區塊鏈技術怎么構架落地應用?

自從區塊鏈技術火爆起來之后&#xff0c;越來越多的金融機構和金融科技公司宣布探索區塊鏈在金融上的運用&#xff0c;國內區塊鏈技術服務商跟隨金融機構的腳步&#xff0c;一方面是基于以太坊智能合約作為底層架構&#xff0c;通過提供中間層工具及協議和應用層的身份驗證、證…

JVM中GC Root對象有哪些?

眾所周知&#xff0c;我們目前最常用的虛擬機hotspot使用可達性分析來進行垃圾回收&#xff0c;而可達性分析需要依賴GC Root。下面我就來介紹下可以作為GC Root的對象。 &#xff08;一&#xff09;虛擬機棧中引用的對象 虛擬機棧中的引用的對象可以作為GC Root。我們程序在虛…

IPv6 解說 ,與IPv4的同異

見&#xff1a;https://baike.baidu.com/item/IPv6/172297 IPv6 IPv6是Internet Protocol Version 6的縮寫&#xff0c;其中Internet Protocol譯為“互聯網協議”。IPv6是IETF&#xff08;互聯網工程任務組&#xff0c;Internet Engineering Task Force&#xff09;設計的用于替…

USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)

夫約翰想要建造一個圍欄用來圍住他的奶牛&#xff0c;可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對于給出的這些地點的坐標&#xff0c;計算最短的能夠圍住這些點的圍欄的長度。 輸入 輸入數據的第一行包括一個整數 N。N&#xff08;0 < N < 10,…

Linux各發行版本簡介

Linux的發行版本可以大體分為兩類&#xff0c;一類是商業公司維護的發行版本&#xff0c;一類是社區組織維護的發行版本&#xff0c;前者以著名的Redhat&#xff08;RHEL&#xff09;為代表&#xff0c;后者以Debian為代表。 1、Redhat&#xff0c;應該稱為Redhat系列&#xff…

個推應用統計產品(個數)Android集成實踐

2019獨角獸企業重金招聘Python工程師標準>>> 前段時間&#xff0c;我們公司的產品又雙叒叕給我們提了新需求&#xff0c;要求我們把APP相關的數據統計分析一下&#xff0c;這些指標包括但不限于應用每日的新增、活躍、留存率等等&#xff0c;最好每天都能提供數據報…

JVM中安全點safePoint有哪些?

安全點是jvm選來進行GC的線程中斷點。線程在執行到安全點后詢問GC標志位&#xff0c;若標志位標識將要進行GC&#xff0c;則程序主動中斷掛起線程等待GC。安全點的選定基本上是根據"是否具有讓程序長時間執行的特征"為標準進行選定的。目前會產生安全點的主要有&…

深入理解 PHP7 中全新的 zval 容器和引用計數機制

深入理解 PHP7 中全新的 zval 容器和引用計數機制 最近在查閱 PHP7 垃圾回收的資料的時候&#xff0c;網上的一些代碼示例在本地環境下運行時出現了不同的結果&#xff0c;使我一度非常迷惑。 仔細一想不難發現問題所在&#xff1a;這些文章大多是 PHP5.x 時代的&#xff0c;而…

分布式系統的架構思路

見&#xff1a;http://www.cnblogs.com/chulung/p/5653135.html 一、前言 在計算機領域&#xff0c;當單機性能達到瓶頸時&#xff0c;有兩種方式可以解決性能問題&#xff0c;一是堆硬件&#xff0c;進一步提升配置&#xff0c;二是分布式&#xff0c;水平擴展。當然&#xff…

狂賭智能手機 中國互聯網巨頭深陷零利潤困局

編者按&#xff1a;智能手機正在中國普及&#xff0c;互聯網企業趨之若鶩。然而&#xff0c;在蘋果、三星共享智能手機市場99%利潤的大背景下&#xff0c;中國互聯網企業要從所剩無幾的利潤空間里分一杯羹&#xff0c;注定備受煎熬&#xff0c;前路迷茫。 互聯網巨頭紛紛進入智…

占用較多堆外內存的區域

&#xff08;1&#xff09;Director Memory 主要在nio中會使用&#xff0c;在內存不足時會拋出OOM或者OOM:Direct buffer memory。 &#xff08;2&#xff09;線程堆棧 為每個線程分配的棧空間&#xff0c;用于保存局部變量&#xff0c;執行程序代碼。內存不足時可能拋出StackO…

Oracle SELECT INTO 和 INSERT INTO SELECT 兩種表復制語句詳解

在Oracle中select into from不可以使用&#xff0c;用create table select代替該功能&#xff01;&#xff01;&#xff01;在Sql Server中可以正常使用。1.INSERT INTO SELECT語句語句形式為&#xff1a;Insert into Table2(field1,field2,...) select value1,value2,... from…

帆軟地址欄傳參,實例

自動查詢&#xff1a; http://help.finereport.com/finereport9.0/doc-view-409.html參數的種類與區別&#xff1a; http://help.finereport.com/doc-view-156基本參數傳遞&#xff08;視頻&#xff09;&#xff1a; http://bbs.fanruan.com/lesson-14.html超級鏈接-傳遞多個值…

RMI 說明

見&#xff1a;https://baike.baidu.com/item/RMI/1786244?fraladdin RMI遠程方法調用 相關概述 RMI是Java的一組擁護開發分布式應用程序的API。RMI使用Java語言接口定義了遠程對象&#xff0c;它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。簡單地說&…

李善友:為什么外企人不敢創業

摘要&#xff1a;20年前&#xff0c;人們最驕傲的是進外企&#xff0c;創業意味著找不到工作。而現在相反&#xff0c;你要說自己在外企工作&#xff0c;會被人笑話&#xff0c;令人激動的事兒是去創業。 李善友&#xff1a;中歐創業中心主任創業學兼任教授、酷6網創始人 孫陶然…