洛谷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.mzph.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网创始人 孙陶然…