SPOJ QTREE Query on a tree 树链剖分

深入解析Uplift模型评估:AUUC指标的计算与应用 本文深入解析了Uplift模型评估的核心指标AUUC。针对传统响应模型无法区分用户真实转化动因的痛点,AUUC通过量化模型对用户增益(Uplift)的排序能力,有效衡量营销干预的增量收益。文章详细拆解了AUUC的计算逻辑,从构建Qini曲线到Python代码实战,并强调了其在预算约束下的精准营销等场景的应用价值与常见陷阱。 阅读详情

树链剖分,注意一下边的关系即可。

传送门:http://www.spoj.com/problems/QTREE/en/
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

using namespace std;

const int MAXN = 100010;

struct Edge {
    int to ;
    int id;
    int value;
    Edge * next;
}E[MAXN*2],*EE;

struct Gragh {
    Edge * first;
}G[MAXN];

struct Tree {
    int x,y;
    int value;
    int lazy;
}t[MAXN<<2];

int pre[MAXN],son[MAXN],siz[MAXN],dep[MAXN],top[MAXN],pos[MAXN],Rank[MAXN];
int N,Q,S;
int num[MAXN];
int idx[MAXN];
int tree_idx = 0;
int tot ;

void Init() {
    EE = E;
    dep[1] = 1;
    pre[1] = 0;
    tree_idx = 0;
    memset(G,0,sizeof(G));
    memset(son,0,sizeof(son));
}

void addedge(int u,int v,int value,int id) {
    EE->to = v ; EE->next = G[u].first ; EE->value = value ; EE->id = id ; G[u].first = EE++;
    EE->to = u ; EE->next = G[v].first ; EE->value = value ; EE->id = id ; G[v].first = EE++;
}

void dfs1(int u) {
    siz[u] = 1;
    son[u] = 0;
    for(Edge * p = G[u].first ; p ; p = p -> next) {
        if(p->to != pre[u]) {
            pre[p->to] = u;
            dep[p->to] = dep[u] + 1;
            dfs1(p->to);
            siz[u] += siz[p->to];
            if(siz[p->to] > siz[son[u]])
                son[u] = p -> to;
        }
    }
}

void dfs2(int u,int ancestor) {
    top[u] = ancestor;
    tree_idx ++;
    pos[u] = tree_idx;
    if(son[u] != 0) {
        dfs2(son[u],ancestor);
    }
    for(Edge * p = G[u].first ; p ; p = p -> next) {
        if(p->to != pre[u] && p->to != son[u]) {
            dfs2(p->to,p->to);
            num[pos[p->to]] = p->value;
            idx[p->id] = pos[p->to];
        }
        else if(p->to == son[u]) {
            num[pos[p->to]] = p->value;
            idx[p->id] = pos[p->to];
        }
    }
} 

void Push_Up(int rt) {
    t[rt].value = max(t[rt<<1].value,t[rt<<1|1].value); 
}

void Build(int x,int y,int rt) {
    t[rt].x = x ; t[rt].y = y; t[rt].lazy = 0; 
    if(x == y) {
        t[rt].value = num[x];
        return ;
    }
    int mid = (x + y) >> 1;
    Build(x,mid,rt<<1);
    Build(mid+1,y,rt<<1|1);
    Push_Up(rt);
}

void Update(int rt,int position,int value) {
    if(t[rt].x == t[rt].y) {
        t[rt].value = value;
        return ;
    }
    int mid = (t[rt].x + t[rt].y) >> 1;
    if(mid >= position) {
        Update(rt<<1,position,value);
    }
    else {
        Update(rt<<1|1,position,value);
    }
    Push_Up(rt);
}

int max_num;

void Query(int rt,int left,int right) {
    if(left <= t[rt].x && t[rt].y <= right) {
        max_num = max(max_num,t[rt].value);
        return ;
    }
    int mid = (t[rt].x + t[rt].y) >> 1;
    if(mid >= left) {
        Query(rt<<1,left,right);
    } 
    if(mid < right){
        Query(rt<<1|1,left,right);
    }
}

// void Change(int x,int y,int lazy) {
//     //printf("lazy : %d\n",lazy);
//     while(top[x] != top[y]) {
//         if(dep[top[x]] < dep[top[y]]) swap(x,y);
//         Update(1,pos[top[x]],pos[x],lazy);
//         x = pre[top[x]];
//     }
//     if(dep[x] > dep[y]) swap(x,y);
//     Update(1,pos[x],pos[y],lazy);
// }

void Query_Tree(int x,int y) {
    while(top[x] != top[y]) {
        if(dep[top[x]] < dep[top[y]]) swap(x,y);
        Query(1,pos[top[x]],pos[x]);
        x = pre[top[x]];
    }
    if(x == y) return ;
    if(dep[x] > dep[y]) swap(x,y);
    Query(1,pos[x]+1,pos[y]);
}

void print_tree(int rt) {
    printf("x : %d y : %d lazy : %d\n",t[rt].x,t[rt].y,t[rt].lazy);
    if(t[rt].x == t[rt].y) {
        printf("%d ",t[rt].value);
        return ;
    }
    print_tree(rt<<1);
    print_tree(rt<<1|1);
}

int ReadInt() {
    char c = getchar();
    while(c > '9' || c < '0') c = getchar();
    int ret = 0;
    while(c <= '9' && c >= '0') {
        ret = ret * 10 + c - '0';
        c = getchar();
    }
    return ret;
}

void input() {
    int u,v,value;
    for(int i = 1 ; i <= N - 1 ; i++) {
        scanf("%d %d %d",&u,&v,&value);
        addedge(u,v,value,i);
    }
    dfs1(1);
    dfs2(1,1);
    // for(int i = 1 ; i <= N ; i++) {
    //     Rank[pos[i]] = num[i];
    // }
    Build(1,N,1);
    char op[10];
    while(scanf("%s",op)) {
        if(op[0] == 'D') break;
        if(op[0] == 'C') {
            scanf("%d %d",&u,&value);
            Update(1,idx[u],value);
        }
        else {
            scanf("%d %d",&u,&v);
            max_num = -2e9;
            Query_Tree(u,v);
            printf("%d\n",max_num);
        }
        //print_tree(1);
        //puts("");
    }
}

int main(void) {
    freopen("a.in","r",stdin);
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d",&N);
        Init();
        input();
        //solve();
    }
    return 0;
}
Node-RED系列(二二):使用dashboard搭配echarts制作漂亮的面板 在node-red中dashboard 是一个很常用的模块,其中它有一个chart节点可以用来制作一些图表,比如柱状图,折线图,饼图,但其中的图表并不是很美观,而且可配置项非常的少。 于是就有很多小伙伴找我做一套比较好看的图表面板,在对比了一下几个图表库,我选中了echarts。 不仅美观大方,而且非常容易集成,配置。下面先来看一下我做的效果。这里是直接做了四个折线图,第一个折线图有动态效果,第二个折线图是一个多线条的折线图,第三个折线图是在一个图例显示两个折线图。第二第三都可以用于数据对比。 第四个折线 阅读详情

相关推荐

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码)

本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。

weixin_30555125的博客 405

SPOJ QTREE - Query on a tree 【树链剖分】

QTREE - Query on a tree #number-theory 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 instruc

世界很大 550

若依RuoYi文件上传漏洞实战:如何安全配置/profile/upload路径(附避坑指南)

本文深入解析若依RuoYi框架中/profile/upload路径的文件上传漏洞,提供详细的安全配置方案和实战指南。通过权限修正、输入验证强化和存储隔离等多层防御策略,有效防范未授权访问和恶意文件上传风险,保障系统安全。

pink的博客 776

SPOJ - QTREE Query on a tree树链剖分

SPOJ - QTREE Query on a tree树链剖分 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 instructions of the fol

weixin_40433319的博客 327

网络设备调试指南:如何用MDIO Clause22/45协议读写Marvell MV88E6390寄存器

本文深入解析了如何通过MDIO Clause 22/45协议对Marvell MV88E6390交换芯片进行寄存器读写调试。文章详细对比了两种协议的本质区别与适用场景,并重点阐述了MV88E6390的直接与间接寻址策略,提供了实战代码示例与关键调试技巧,帮助网络工程师高效解决配置与通信问题。

tequila的博客 517

步进电机 cia402协议 报文自己的理解 (笔记)

步进电机 cia402协议 报文自己的理解 (笔记)

she666666的博客 3800

[spoj QTREE Query on a tree]树链剖分

[spoj QTREE Query on a tree]树链剖分题目链接:[spoj QTREE Query on a tree] 题意描述:给定一棵顶点数为N的带权树。有Q次操作,每次操作或者改变第ii条边的权值,或者查询顶点uu到vv的路径上面的最长边。 解题思路: 树链剖分的入门题。今天比较系统的学习了一下树链剖分。其实树链剖分就是将树上的边(点)映射到若干条连续的线段上。然后结

Fighting! 662

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 709

SPOJ 375 QTREE Query on a tree 树链剖分

题目:http://www.spoj.com/problems/QTREE/en/ 题意:给定一棵有n个点的树,每条边都有权值。有两种操作,第一种是询问两点间路径上边权的最大值,第二种是改变输入顺序中第i条边的权值 思路:树链剖分第一题。 siz[v]表示以v为根的子树的节点数 dep[v]表示v的深度(根深度为1) top[v]表示v所在的链的顶端节点 fat[v]表

弱智就要多努力 533

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 925

基于simulink的车道保持辅助系统(LKA)的仿真与实现

本文介绍了如何利用Simulink实现车道保持辅助系统(LKA)的仿真与建模。首先对比了车道偏离预警(LDW)和LKA的功能差异,强调LKA的主动干预特性。接着详细阐述了LKA系统架构,包括环境感知、决策控制等核心组件,并基于自行车模型建立车辆横向动力学方程。 文章重点演示了Simulink建模步骤:搭建车辆动力学模型、设计LKA控制器(采用LQR算法)、实现执行器接口和驾驶员干预检测。通过四个典型场景的仿真测试,验证了系统在直道行驶、弯道跟踪等工况下的控制性能,并给出了关键评价指标。最后展望了MPC控制、

amy_mhd的博客 226

spoj375QTREE - Query on a tree(树链剖分)

题目链接 QTREE - Query on a tree #tree 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 instru

fouzhe的博客 528

引以为戒:一个“看不见”的空格,导致上下文超限——从 `llama-server` 错误说起

文章摘要: 本文分享了Qwen工程团队在部署llama-server时遇到的参数失效问题:明明设置了-c 32768上下文参数,却仍报错"超出4096 tokens限制"。经排查发现,问题根源是批处理脚本中续行符^后存在两个空格,导致参数被忽略。文章详细解析了Windows批处理中^的严格语法规则(必须紧贴前字符),对比了错误与正确写法的差异,并给出4条实用建议:使用编辑器显示空白字符、调试时关闭@echo off、预检完整命令、优先单行命令。最后强调在AI系统部署中,此类"隐

刘一说的IT专栏 533

SPOJ - QTREE Query on a tree 树链剖分模板题

传送门:SPOJ - QTREE 题意:给出一棵树,和两种操作: 1.把第i条边的权值改成ti。 2.询问a节点到b节点之间的路径中的最大边权值。 思路:树链剖分裸题。 树链剖分学习:点击打开链接 个人理解:树链剖分有点类似于树的dfs序 + 线段树维护,不过是用各种数据结构去维护划分出来的边罢了。 代码: #include #define ll long long #define

WA是一笔财富 251

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SPOJ QTREE Query on a tree 树链剖分

新的树链剖分模板实验

Code of Duty 864

IMSL CNL 7.0.0 (x86-64)Crack

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

[spoj 375]QTREE - Query on a tree[树链剖分]

You are given a tree (an acyclic undirected connected graph) withNnodes, and edges numbered 1, 2, 3...N-1. We will ask you to perfrom some instructions of the following form: CHANGE i ti: ...

dirushi6322的博客 113

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SPOJ - QTREE3Query on a tree again!——树链剖分

【题目描述】 SPOJ - QTREE3Query on a tree again! 【题目分析】 题目要求是输出从111到xxx的路径上遇到的第一个黑色的点。我们可以用树链剖分(不了解的同学请出门左拐,详见树链剖分入门) 我们用线段树维护每个区间第一次遇到黑点的位置,这样访问出的点同样是从1开始路径上的第一个点。因为我们总是从根节点1开始,我们在访问的时候从后往前每次访问重链时在线段树上都是一...

T_T233333333的博客 269

SPOJ QTREE Query on a tree(树链剖分)

SPOJ QTREE Query on a tree 题目链接 树链剖分基础题 代码: #include #include #include #include using namespace std; const int N = 10005; int dep[N], top[N], sz[N], son[N], fa[N], id[N], idx, val[N]

Remilia's 1047

【SPOJ】【树链剖分】【线段树】QTREE Query on a Tree

SPOJ QTREE Query on a Tree 题目 题目传送门 题目大意 给定一棵节点数为NNN的树,有两种操作:CHANGE i ti,QUERY a b,分别表示将编号为i的边的权值改为ti,查询由节点a到节点b路径中的最大值。对于每一个QUERY操作,输出节点a到节点b路径中的最大值。 思路 树链剖分板子题。 我们使用线段树来维护最大权值,则这道题树...

IDDFS 476

SPOJ - QTREE2 Query on a tree II树链剖分

SPOJ - QTREE2 Query on a tree IIYou are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. Each edge has an integer value assigned to it, representing

weixin_40433319的博客 252

SPOJ 375 QTREE Query on a tree 树链剖分水题

题目大意: 给定一棵树后两种操作 修改边权, 询问两点间路径上的边权的最大值 大致思路: 树链剖分水题 剖分之后线段树维护最大值即可, 单点更新区间查询 代码如下: Result  :  Accepted     Memory  :  4403 KB     Time  :  490 ms /* * Author: Gatevin * Created Time:

Gatevin的专栏 530

[SPOJ375]QTREE - Query on a tree【树链剖分】

题目描述 给你一棵树,两种操作。 修改边权,查找边权的最大值。 分析 我们都知道,树链剖分能够维护点权。 而且每一条边只有一个,且唯一对应一个儿子节点,那么就把信息放到这个儿子节点上。 注意,lca的信息不能算到,也就是当查询到了\(top[u]=top[v]\)的时候,要从\(idx[u]+1\)到\(v\)的查询,因为\(idx[u]\)为lca。 代码 #include <b...

weixin_30900589的博客 127

SPOJ - QTREE Query on a tree ( 树链剖分 入门)

传送门:http://www.spoj.com/problems/QTREE/en/ 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 instructions

Vision 455

SPOJ375[QTREE - Query on a tree] 树链剖分

spoj375 QTREE 树链剖分

Venishel的博客 318

SPOJ-QTREE Query on a tree 树链剖分

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - SPOJ-QTREE 题意概括   给你一颗树,每两点之间有权值,然后改变一些权值,问一条路径上的最大值。 题解   树链剖分裸题。 代码 #include <cstring> #include <algorithm> #includ...

weixin_30627341的博客 127

SPOJ - QTREE Query on a tree 【树链剖分+边权】

滑稽树上滑稽果,滑稽树下你和我,滑稽树前做游戏,滑稽树后做交易,滑稽多又多 又到了众望所归的滑稽时刻 今天我们将面对的,是恶名昭著的树上滑稽 它有着n个滑稽果和编号为1~n-1的n-1条滑稽枝,每一条滑稽枝都连接着两个滑稽果并且有着自己的滑稽指数 滑稽大军为了变得和它一样滑稽打倒它,将有以下两种形式的任务发布: (1)CHANGE i ti:滑稽指挥部需要你使用滑稽剑将编号为i的滑稽枝的滑稽指数变...

slass-mot-odet 467
上一篇: HYSBZ 1036 树的统计Count 树链剖分
下一篇: FZU 2082 过路费 树链剖分
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值