洛谷-4114 Qtree1

Java服务端实现Google Pay支付功能 全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。 阅读详情

题目描述
给定一棵n个节点的树,有两个操作:
CHANGE i ti 把第i条边的边权变成ti
QUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0
输入格式
第一行输入一个n,表示节点个数
第二行到第n行每行输入三个数,ui,vi,wi,分别表示 ui,vi有一条边,边权是wi
第n+1行开始,一共有不定数量行,每一行分别有以下三种可能
CHANGE,QUERY同题意所述
DONE表示输入结束
输出格式
对于每个QUERY操作,输出一个数,表示a b之间边权最大值

输入输出样例
输入 #1
3
1 2 1
2 3 2
QUERY 1 2
CHANGE 1 3
QUERY 1 2
DONE

输出 #1
1
3

说明/提示
数据保证:
1≤n≤1051 \leq n \leq 10^51≤n≤105
操作次数 ≤3∗105\leq 3∗10^5≤3∗105
wi和ti ≤231−1\leq 2^{31}−1≤231−1

解释:直接树链剖分就可以了,我们把边权放到深度大的点上,然后查询,公共祖先需要特殊处理,跳过后查询

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lson rt<<1
#define rson rt<<1|1
inline char nc() {
    static char buf[1000000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
template <class Tp> inline void read(register Tp &s) {
    s=0;
    register bool neg=0;
    register char c=nc();
    for(;c<'0'||c>'9';c=nc()) neg|=(c=='-');
    for(;c>='0'&&c<='9';s=s*10+(c^48),c=nc());
    s=(neg?-s:s);
}

const int N=1e5+5,M=2e5+5;
int n,idx,dfn[N],seq[N],U[N],V[N],W[N],val[N],fa[N],dep[N],top[N],sz[N],hvy[N];
int tot,lnk[N],ter[M],nxt[M],wei[M],seg[N<<2];

void add(int u,int v,int w) {
    ter[++tot]=v,wei[tot]=w,nxt[tot]=lnk[u],lnk[u]=tot;
}
void dfs1(int u,int f) {
    fa[u]=f,dep[u]=dep[f]+1,sz[u]=1,hvy[u]=top[u]=0;
    for(int i=lnk[u];i;i=nxt[i]) {
        int v=ter[i];
        if(v==f) continue;
        val[v]=wei[i];
        dfs1(v,u);
        sz[u]+=sz[v];
        if(sz[hvy[u]]<sz[v]) hvy[u]=v;
    }
}
void dfs2(int u,int tp) {
    dfn[u]=++idx,seq[idx]=u,top[u]=tp;
    if(!hvy[u]) return;
    dfs2(hvy[u],tp);
    for(int i=lnk[u];i;i=nxt[i]) {
        int v=ter[i];
        if(v==fa[u]||v==hvy[u]) continue;
        dfs2(v,v);
    }
}
void pushup(int rt) {
    seg[rt]=std::max(seg[lson],seg[rson]);
}
void build(int rt,int l,int r) {
    if(l==r) {
        seg[rt]=val[seq[l]];
        return;
    }
    int mid=(l+r)>>1;
    build(lson,l,mid);
    build(rson,mid+1,r);
    pushup(rt);
}
void modify(int x,int rt,int l,int r,int val) {
    if(l==r) {
        seg[rt]=val;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid) modify(x,lson,l,mid,val);
    else modify(x,rson,mid+1,r,val);
    pushup(rt);
}
int query(int x,int y,int rt,int l,int r){
    if(x>y) return 0;
    if(x<=l&&r<=y) return seg[rt];
    int mid=(l+r)>>1,res=0;
    if(x<=mid) res=std::max(res,query(x,y,lson,l,mid));
    if(mid<y) res=std::max(res,query(x,y,rson,mid+1,r));
    return res;
}
int chainQuery(int u,int v) {
    if(u==v) return 0;
    int res=0;
    for(int fu=top[u],fv=top[v];fu^fv;u=fa[fu],fu=top[u]){
        if(dep[fu]<dep[fv]) std::swap(u,v),std::swap(fu,fv);
        res=std::max(res,query(dfn[fu],dfn[u],1,1,n));
    }
    if(dep[u]>dep[v]) std::swap(u,v);
    res=std::max(res,query(dfn[u]+1,dfn[v],1,1,n));
    return res;
}
int main() {
    read(n);
    for(int i=1;i<n;++i) {
        int u,v,w;
        read(u),read(v),read(w);
        add(u,v,w),add(v,u,w);
        U[i]=u,V[i]=v,W[i]=w;
    }
    dfs1(1,0),dfs2(1,1),build(1,1,n);
    while(1) {
        char c=nc();
        while(c<'A'||c>'Z') c=nc();
        if(c=='D') break;
        int x,y;
        read(x),read(y);
        if(c=='C') {
            int u=U[x],v=V[x];
            if(fa[v]==u) std::swap(u,v);
            modify(dfn[u],1,1,n,y);
        } else {
            printf("%d\n",chainQuery(x,y));
        }
    }
    return 0;
}


【华为Hilink SDK Linux系统开发】目录 开源一小步 目录 【华为Hilink开发】第一章:华为hilink平台简介及开发流程 【华为Hilink开发】第二章:华为hilink SDK网络适配、网关添加删除 【华为Hilink开发】第三章:华为hilink SDK子设备添加、删除 【华为Hilink开发】第四章:华为hilink SDK子设备控制及同步 【华为Hilink开发】第五章:华为hilink SDK适配遇到的问题 ... 阅读详情

相关推荐

高通平台Camera sensor bring up!

Qualcomm Camera sensor bring up!0. 准确1. Kernel 底层驱动配置1.1 dtsi1.2 pinctrl2. Chi-Cdk XML 配置2.1 sensormodule2.2 sensor3. CHECK 本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】 —only for sensor probe sucess. 0....

Understand-image 9239

洛谷 P4114 Qtree1(树链剖分+树状数组)

P4114 Qtree1 思路: 树剖后,对于一条边来说,把边权赋给儿子节点,然后树状数组更新,求区间最大值。 代码: #include<bits/stdc++.h> using namespace std; const int N=100005; struct edge { int to,cost; }; struct Edge { int u,v,w; }; vector<Edge> e; int son[N];//son[i]表示i的重儿子 int size[N];//si

weixin_43970556的博客 238

【MUJOCO控制篇-2】控制一个简单的机械臂

本篇博客将逐步分析和解释如何通过Python代码使用MuJoCo库来控制一个机械臂模型。我们将从加载模型开始,逐步深入到PID控制器的实现,最后讨论如何实现轨迹跟踪功能。上期内容为如何建模一个简单的机械臂模型,本篇文章将基于上篇内容进行深入探讨如何实现一个简单的控制。

echo_Fangyb的博客 6748

洛谷 P4114 Qtree1

Qtree系列都跟树有着莫大的联系,这道题当然也不例外 我是题面 读完题,我们大概就知道了,这道题非常简单,可以说是模板题。树剖+线段树轻松解决 直接看代码吧 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cctype>...

weixin_30781433的博客 151

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1709

I2C通信协议SCL与SDA引脚特性:核心要点总结

深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。

weixin_42103128的博客 2737

洛谷P4114 Qtree1

题目背景数据规模和spoj上有所不同题目描述给定一棵n个节点的树,有两个操作:CHANGE i ti 把第i条边的边权变成tiQUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0输入输出格式输入格式:第一行输入一个n,表示节点个数第二行到第n行每行输入三个数,ui,vi,wi,分别表示 ui,vi有一条边,边权是wi第n+1行开始,一共有不定数量行,每一行分别有以下三种可能C...

蒟蒻的博客 271

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5620

【洛谷P4114】Qtree1

题目描述: 给定一棵n个节点的树,有两个操作: CHANGE i ti 把第i条边的边权变成ti QUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0   解析:        树链剖分,将边权转移到点权上。   代码: #include &lt;bits/stdc++.h&gt; using namespace std; const in...

ETO的博客 222

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1026

大厂硬件机试选择题与判断题解析-卷1

本文精选30道硬件工程师机试题目,涵盖模拟电路、数字电路、PCB设计三大方向。模拟电路部分重点考察运算放大器、滤波器、整流电路等核心知识;数字电路部分聚焦计数器、电平转换等关键技术;PCB设计部分强调高速信号处理、阻抗控制等实践要点。题目均来自华为、小米等大厂真题,剔除基础题,每道题附详细解析,包括正确答案推导过程及相关公式说明。特别针对易错概念(如负反馈类型判断、Q值与带宽关系等)进行重点解析,帮助考生系统掌握硬件设计的核心考点和解题思路。

启芯硬件的博客 679

洛谷 - P4114 - Qtree1 - 重链剖分

https://www.luogu.org/problem/P4114 维护边权的话,用深度大的点表示这条边(可以遍历一边边询问两端深度,这样不需要修改dfs1,也可以在dfs1的时候向下走的同时把边权拷贝进深度大的点。),然后在链上问的时候,最后一次问的左端点要+1(小心左右端点原本重合)。 要注意每个点x实际上在线段树上的位置是tid[x],不要改错了。线段树build的时候初始化的...

weixin_30664051的博客 119

WPF数据绑定Binding对数据的转换与效验(四)

Binding的作用就是架在Source与Target之间的桥梁,数据可以在这座桥梁的帮助下来流通。就像现实世界中的桥梁会设置一些关卡进行安检一样,Binding这座桥上也可以设置关卡对数据的有效性进行检验,不仅如此,当Binding的两端要求使用不同的数据类型时,我们还可以为数据设置转换器。Binding用于数据有效性检验的关卡是它的ValidationRules属性,用于数据类型转换的关卡是它的Converter属性。

qq_30725967的博客 1630

洛谷P4114 Qtree1 树剖+点权化边权+线段树

洛谷P4114 Qtree1 标签 树链剖分 边权化点权 简明题意 给一颗树,给出边权,需要支持两种操作: 修改:将第i条边权改为c 查询:查询u-v的路径中权值最大值 思路 首先化边权为点权是必须的。然后 修改操作: 单点修改,直接改就行了 查询操作: 由于化边权为点权了,对于u-v的路径,我们直接去掉LCA(u,v)再查就是正确答案了。具体怎么去掉呢?直接在查询之前,...

danzh 264

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Luogu4114 Qtree1

原题链接:https://www.luogu.org/problemnew/show/P4114 Qtree1 题目背景 数据规模和spoj上有所不同 题目描述 给定一棵n个节点的树,有两个操作: CHANGE i ti 把第i条边的边权变成ti QUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0 输入输出格式 输入格式: 第一行...

ShadyPi的IT笔记 286

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

树链剖分【洛谷P4114】 Qtree1

P4114 Qtree1 题目描述 给定一棵n个节点的树,有两个操作: CHANGE i ti 把第i条边的边权变成ti QUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0 码农题。 话说我码得变快了啊,虽然跟顾z吹45分钟码完Qtree没有完成,不过总共用了55分钟还是不长的嘿嘿。 code: #include <iostream> #inclu...

weixin_30323961的博客 148

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷 P4114 Qtree1 树链剖分

目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 说明 ...

weixin_30715523的博客 158

洛谷 P4114 Qtree1(边树剖)

const int N=1e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int maxx; #define lson id<<1 #define rson id<<1|1 }t[N<<2]; struct Edge { int u,v,w; ...

C_Dreamy的博客 388

洛谷P4114 Qtree1(树链剖分+线段树)

传送门 LCT秒天秒地用什么树剖 这题可以算是树剖的比较裸的题目了 把每一条边的权值下放到他两边的点中深度较深的那个 然后直接用树剖+线段树带进去乱搞就可以了 1 //minamoto 2 #include<bits/stdc++.h> 3 using namespace std; 4 template<class T>inline...

weixin_34050005的博客 141

P4114 Qtree1

https://www.luogu.org/problemnew/show/P4114 /*#include <iostream> #include <cstring> #include <queue> #include <vector> #include <algorithm> #include <cstdio>*/ ...

newhonor 183

luogu4114 spoj qtree1

http://www.elijahqi.win/2018/02/11/spoj-qtree1-luogu4114/ ‎ You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3…N-1. We will ask you to perfrom some...

Elijahqi 235

luogu P4114 Qtree1

题面传送门 spojspojspoj卡语言太恶心所以来洛谷上交了。 正常树剖不解释但是有些地方可以写法优化。 比如线段树只要一个数组就够了。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,sx,sy,sz,x[300039],y[300039],z[300039],id[100039],idea,son[1000

fxt275307894a的博客 190

【luogu P4114 Qtree1】 题解

题目链接:https://www.luogu.org/problemnew/show/P4114 1.把边权转化到点权:选取连接这条边的两个点中较深的一个。 2.查询点到点之间的边权时,要从seg[x]+1 到 seg[y],因为seg[x]其实连接的是上面一条边的边权。 #include <cstdio> #include <cstring> #include <i...

weixin_30783913的博客 65
上一篇: 洛谷-4868 Preprefix sum
下一篇: 洛谷-2183 [国家集训队]礼物
mkopvec
博客等级 码龄8年 22粉丝 331原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值