poj 3237 树链剖分

Cesium中GLB模型加载 Cesium中GLB模型加载全解析:Primitive与Entities方法详解 阅读详情

这几天,看到别的队都有会树链剖分的,于是就来学了一下。。。

就是把边的权值变成了深度较深的那个点的权值

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

const int maxn = 100010;
int sum[maxn*4],add[maxn*4];
struct si{
    int f,t,c,next;
}side[maxn*2];
int head[maxn];
int tid[maxn],ran[maxn],num[maxn],son[maxn];
int top[maxn],fa[maxn],siz[maxn],dep[maxn];
int tim,cnt;
int n,q,s;

void dfs1(int u,int father,int d)
{
    dep[u]=d;
    fa[u]=father;
    siz[u]=1;
    for(int i=head[u]; i!=-1; i=side[i].next)
    {
        int v=side[i].t;
        if(v!=father)
        {
            dfs1(v,u,d+1);
            siz[u]+=siz[v];
            if(son[u]==-1||siz[v]>siz[son[u]])
                son[u]=v;
        }
    }
}

void dfs2(int u,int tp)
{
    //cout<<888888<<endl;
    top[u]=tp;
    tid[u]=++tim;
    ran[tid[u]]=u;
    if(son[u]==-1) return;
    dfs2(son[u],tp);
    for(int i=head[u]; i!=-1; i=side[i].next)
    {   //cout<<i<<endl;
        int v=side[i].t;
        //cout<<v<<endl;
        if(v!=son[u]&&v!=fa[u])
            dfs2(v,v);
    }
}

void init(){
    tim=cnt=0;
    memset(head,-1,sizeof(head));
    memset(son,-1,sizeof(son));
}

void addside(int f,int t,int c){
    side[cnt]=(si){f,t,c,head[f]};
    head[f]=cnt++;
    side[cnt]=(si){t,f,c,head[t]};
    head[t]=cnt++;
}


/*
void change(int a,int b,int c){
    while(top[a]!=top[b]){
        if(dep[top[a]]<dep[top[b]]) swap(a,b);
        update(tid[top[a]],tid[a],c,1,n,1);
        a=fa[top[a]];
    }
    if(dep[a]<dep[b]) swap(a,b);
    update(tid[b],tid[a],c,1,n,1);
}
*/

void build(int l,int r,int rt){
    if(l==r){
        sum[rt]=num[l];
        return ;
    }
    int mid=(l+r)/2;
    build(l,mid,rt<<1);
    build(mid+1,r,rt<<1|1);
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}

void update(int L,int R,int c,int l,int r,int rt){
    if(l>=L&&r<=R){
        sum[rt]=c;
        return ;
    }
    int mid=(l+r)/2;
    if(mid>=L) update(L,R,c,l,mid,rt<<1);
    if(mid+1<=R) update(L,R,c,mid+1,r,rt<<1|1);
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}

void change(int a,int b){
    int f=side[a*2-1].f,t=side[a*2-1].t;
    if(dep[f]<dep[t]) swap(f,t);
    update(tid[f],tid[f],b,2,n,1);
}

int query(int L,int R,int l,int r,int rt){
    int ans=0;
    if(l>=L&&r<=R){
        return sum[rt];
    }
    int mid=(l+r)/2;
    if(mid>=L) ans+=query(L,R,l,mid,rt<<1);
    if(mid+1<=R) ans+=query(L,R,mid+1,r,rt<<1|1);
    return ans;
}

void Query(int a,int b){
    int ans=0;
    while(top[a]!=top[b]){
        if(dep[top[a]]<dep[top[b]]) swap(a,b);
        ans+=query(tid[top[a]],tid[a],2,n,1);
        a=fa[top[a]];
    }
    if(dep[a]>dep[b]) swap(a,b);
    if(a!=b) ans+=query(tid[a]+1,tid[b],2,n,1);
    printf("%d\n",ans);
}

int main()
{
    while(cin>>n>>q>>s){
        init();
        int a,b,c;
        for(int i=0;i<n-1;i++){
            scanf("%d %d %d",&a,&b,&c);
            addside(a,b,c);
        }
        dfs1(1,1,1);
        dfs2(1,1);
        for(int i=0;i<cnt;i+=2){
            int f=side[i].f, t=side[i].t, c=side[i].c;
            if(dep[f]>dep[t]) num[tid[f]]=c;
            else num[tid[t]]=c;
        }
        build(2,n,1);
        while(q--){
            scanf("%d",&a);
           // cout<<a<<endl;
            if(a==0){
                scanf("%d",&b);
                //cout<<a<<' '<<b<<endl;
                Query(b,s);
                s=b;
            }
            if(a==1){
                scanf("%d %d",&b,&c);
                //cout<<a<<' '<<b<<' '<<c<<endl;
                change(b,c);
            }
        }
    }
    return 0;
}



【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象) HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a 阅读详情

相关推荐

模拟调制系统实战:从AM到FM的5种调制方式对比与选型指南

本文深度解析AM、DSB、SSB、VSB、FM五种经典模拟调制方式,从实现电路、频谱效率、抗噪性能及工程成本等维度进行实战对比。通过MATLAB/Simulink仿真案例,提供清晰的选型决策框架,帮助工程师在无人机图传、短波通信、广播系统等具体项目中,根据带宽、功耗和抗干扰需求选择最优方案。

study的专栏 930

POJ 3237 树链剖分

题目链接:http://poj.org/problem?id=3237 题意:给定一棵n个结点n-1条边的树。 每条边都是一个边权。 现在有4种操作 1:CHANGE I V:把(输入的)第i条边的边权改为V 2:NEGATE a b:把点a到点b的路径上的边权取反 3:QUERY a b:输出点a到点b的路径上边权最大值。 4:DONE:结束操作。 思路:树链剖分。 涉及的是边...

weixin_34202952的博客 133

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

POJ 3237 Tree(边树剖)

这个题比较难是因为,有一个区间取反操作,(好吧,还是我菜) 求一个区间的最大值,若区间内所有的数都变成原来的负数形式,那么其最小值就成为了最大值 还有一点就是在树剖中的点权变为了边权,因为这样,在单边修改的时候,要找对应边上深度较大的点(代码中的注释 1),在区间修改时,要忽略掉他们的 LCA ,因为在退出 while 循环后,x,y 两点跳到同一条重链上,深度最小的那个点就是 LCA const int N=1e5+5; int n,m,t; int i,j,k; ...

C_Dreamy的博客 504

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1667

Halcon实战:基于图像清晰度自动筛选最佳对焦图片

本文详细介绍了如何使用Halcon实现基于图像清晰度的自动筛选最佳对焦图片技术。通过分析灰度值统计和标准差等核心指标,结合实战代码示例,帮助开发者高效处理工业检测中的对焦问题,提升自动化检测的准确性和效率。

weixin_27015733的博客 439

POJ 3237(树链剖分 + 线段树)

题目链接:我是链接! 题意:在一棵树上,点和点之间的路径有边权,有三种操作 CHANGE把第i条边的权值改为a,NEGATE把第a个点到第b个点的边的权值全部取相反数,QUERY求第a个点到第b个点的最大边权。 分析:树链剖分的模板题了,之前写的用树状数组维护就可以了,这次稍微复杂一点用线段树+懒操作来维护。但是考虑到需要加lazy标记,所以除了区间最大值以外还需要维护一个区间最小值。然后每次...

可以说非常弱鸡 528

f2fs学习笔记 - 3. F2FS文件系统布局

目录1.前言2.F2FS布局说明2.1. super block(block 0x0 ~ block 0x1ff)2.2 CP(block 0x200 ~ block 0x5ff)cp page1nat journalsit journaldata summarycurrent hot node summarycurrent warm node summarycurrent cold node summarycp page22nd checkpoint2.3 SIT(block 0x600 ~ block

HZero 4645

poj-3237(树链剖分)

对树有三种操作: Q~  a b  询问a~b路径的最大值; N~  a b  对a~b路径上的数进行取反操作;(a=-a) C~  a b  将第a条边的值改为b; 对于取反操作,记录区间的最大和最小值和标记k,更新线段即可。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #inc

AC之路 765

Zotero内存占用与存储优化:从根源解决卡顿与空间不足

文献管理软件在学术工作中扮演着重要角色,其核心原理是通过数据库管理元数据与附件文件,实现文献的快速检索与组织。然而,随着文献库规模增长,软件的资源管理机制可能面临挑战,尤其是内存占用与存储空间优化问题。从技术价值看,高效的附件管理策略不仅能提升软件响应速度,还能确保数据安全与可移植性。在实际应用场景中,研究者常遇到软件卡顿、存储目录膨胀等痛点,这通常与附件存储模式、缓存机制及数据库维护有关。本文聚焦于Zotero这一主流工具,针对其内存占用高、文件无法删除等常见问题,提供了外置存储、链接附件、数据库维护等系

weixin_34209060的博客 454

Tesseract in Java - Intellij IDEA对Tess4J的配置和使用

最近要弄OCR,搜到这个,官网全英文,很烦,看看有没有中文的博客介绍,擦,一个比一个奇葩,还是自己按照官方的来吧,外网慢的很,传到csdn给大家下载。中文训练库下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916532Tess4J3.4下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916519安装

Lewis的博客 1万+

poj 3237 Tree(最近公共祖先)

Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 2802   Accepted: 762 Description You are given a tree with N nodes. The tree’s nodes are numbered 1 t

街角的花街糖 768

端侧 AI 落地避坑指南(中):为什么 QAT 救不了精度?——对齐“融合后算子“的硬件物理约束

在上一篇文章中,我们深入探讨了量化的本质,并得出结论:QAT(量化感知训练)是保持精度的关键。明明做了 QAT,精度还是崩塌了!让我们看一个真实的案例:✅ 使用了✅ 配置了量化✅ 训练了 50 个 epoch,学习率降为原来的 1/10✅ 冻结了 BN 统计量FP32 模型:mAP = 0.85QAT 后 FP32:mAP = 0.84(正常)工具量化后:mAP = 0.68(崩塌!问题出在哪里?层融合(Layer Fusion)机制。

weixin_51988935的博客 55

树链剖分边权 poj 3237

#include <cstdio> #include<string.h> #include<algorithm> #include<iostream> using namespace std; const int M=2e5+100; int f[M]; int d[M]; int siz[M]; int rk[M];//保存树链剖分后,节点编号对...

Black__wing的博客 316

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

poj 3237 Tree(树链剖分)

题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为vNEGATE a b:将ab路径上所有节点的权值变为相反数QUERY a b:查询ab路径上节点权值的最大值。 解题思路:树链剖分,然后用线段树维护节点权值,成端更新查询。 #include #include #include using namespace

不慌不忙、不急不躁 1434

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

poj 3237 Tree 题解(树链剖分,线段树)

原题链接: poj 题意简述 多组数据。给定一个树,带边权,要支持三种操作,分别是: 两个节点之间的路径的边权全部×−1\times -1×−1,即取相反数 单边修改边权值 求两个节点之间路径上的最长边 数据 输入 第一行一个ttt,表示有ttt组数据。对于每一个数据,先有一个nnn,表示点数。然后n−1n-1n−1行,每行两个数a,b,ca,b,ca,b,c表示a,ba,ba,b之间有一个边...

LightningUZ的博客 287

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

「POJ3237」Tree【树链剖分+线段树】

题目链接:http://poj.org/problem?id=3237 Tree Time Limit: 5000MS Memory Limit: 131072K Description You are given a tree with NNN nodes. The tree’s nodes are numbered 111 through NNN and its edges are numbe...

wzw 234

POJ3237 Tree 树链剖分 边权

POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a->b边权最大值 题解: 修改边权就查询点的深度大的点,用大的点去存这条边的边权,其余的就和点权的是一样的了 取反操作用线段树维护,区间最大值取反就是区间最小值,区间最小值取反就是区间最大值 所以维护两颗...

weixin_30570101的博客 184

POJ-3237(树链剖分+线段树)

题解:更改把路径上的边值都变为负值一看就是树链剖分,接着我们用点连着深度比较深的边的值设为边的值那么我们查询的时候当到达最近公共祖先的时候最近公共祖先的点的编号注意加一,接着就是线段树的更新用1和0表示区间变为负数或者不变为负数即可,最后要记录一下边队应的编号即可 #include #include #include #include using namespace std; #define l

Soul 458

poj 3237 Tree 树链剖分

// poj 3237 Tree 树链剖分 // // 解题思路: // // 树链剖分,维护一个最大值和一个最小值, // 区间更新,laz标记.单点更新,去掉叶子节点的laz // 标记.边权改为离根节点较远的点的点权.求lca // 的方式进行区间更新.注意线段树的操作以及push_up() // push_down()的操作.写了很久,感悟颇多,继续加油吧~~~ #include

TIMELIMITE的专栏 541

POJ3237 (树链剖分+线段树)

Problem Tree (POJ3237) 题目大意   给定一颗树,有边权。   要求支持三种操作:     操作一:更改某条边的权值。     操作二:将某条路径上的边权取反。     操作三:询问某条路径上的最大权值。 解题分析   树链剖分+线段树。练手题。 参考程序 1 #include <cstdio> 2 #include...

aekijekzn484879763的博客 145

poj 3237(树链剖分)

题意:有一棵树,n个点,n-1条边每条边有一个权值,有三种操作,query a b,询问a到b所有路径的最大权值,negate a b,把a到b所有路径权值设置为对应权值的相反数,change a b,把第a条边权值设为b。 题解:线段树维护最大值和最小值,negate a b的时候把对应区间最大最小值交换并取反,注意要用一个标记每个区间取反的次数,因为偶数次取反相当于不变。#include <c

俯瞰风景 507

POJ 3237 Tree (树链剖分+线段树)

POJ 3237 Tree题目大意:给你n个结点的树,有三种操作: 1.CHANGE i v 将i号边边权变为v 2.NEGATE a b 将a点到b点路径上的边权取相反数 3.QUERY a b 找到a点到b点路径上的边权的最大值 输出所有3操作结果,指令结束标志为”DONE”. 有多组数据.题目分析:(又滚去做树链剖分的题,元旦放假前开始做到现在,233)将边权转化成相连两点中子节点的

Continue 1041

SPOJ 375 QTREE POJ 3237 TREE 树链剖分

http://wenku.baidu.com/view/8861df38376baf1ffc4fada8 先上一往篇论文,我总觉得论文说的不够详细,但是可以理解好多东西。 首先,树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护。 通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中size[v]是以v为根的子树的

Senbonzakura 1371

poj3237(树链剖分)

题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值); 2)取反操作,将a点和b点之间的路径权值都取相反数; 3)变化操作,把某条边的权值变成指定的值。 分析:树链剖分,线段树维护好区间的最大最小值,方便取反操作更新。。。 #include ...

weixin_34061555的博客 89

poj3237tree【树链剖分入门题+线段树】

休息了两天,今天开始做树链剖分,除了模板长以外,还是挺好理解的。就只是线段树+剖分独特的函数,然后树链剖分所用的数组有点多,没了。其中需要注意的一个点是“链”(路径)不一定是从根节点到叶子节点的,轻儿子这个点它也有重儿子啊啊啊。 再说这个题,单点更新,区间取相反数,区间求最大值。 /*********** poj3237 2015.1.23 2504K 657MS C++ 6396B ****

MissZhou要努力 1628
上一篇: poj 3294 后缀数组
下一篇: poj 3237 树链剖分+线段树
ACMer_浩
博客等级 码龄12年 0粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值