洛谷 P3313 [SDOI2014]旅行(树链剖分+线段树)

【自动驾驶端到端5:VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning】 从大规模人类驾驶演示中学习类人驾驶策略是有希望的。但是,规划的不确定性使得从驾驶演示中提取驾驶知识是有挑战性的。从统计学习的角度来看,动作(包括实际和速度)是高度随机的,受许多无法建模的潜在因素影响。 阅读详情

传送门


这题是求固定路径上某固定宗教的评级最大值或和,由于我们知道树上路径是顺着链走的,我们可以用树链剖分使一条链上的编号连续,方便查询。

每个宗教建一棵线段树,动态开点,编号按树链剖分后的新编号,维护的是城市评价。
那么改变评级就相当于改变某线段树内的值,改变宗教就相当于换根(移到另一棵线段树内)。

求值时按链往上跳,统计答案。


Code:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
#define mid (l+r)/2

struct node{int y,next;}a[200010];
int first[100010],w[100010],c[100010];
int rt[100010],total[20000010],maxx[20000010],lc[20000010],rc[20000010];
int fa[100010],dep[100010],son[100010],top[100010],tot[100010],image[100010],fact[100010];
int n,m,d,v,len;

void ins(int x,int y){a[++len]=(node){y,first[x]};first[x]=len;}

void dfs_1(int x)
{
    tot[x]=1;
    for(int i=first[x];i;i=a[i].next)
    {
        int y=a[i].y;
        if(y!=fa[x])
        {
            fa[y]=x;
            dep[y]=dep[x]+1;
            dfs_1(y);
            if(tot[y]>tot[son[x]]) son[x]=y;
            tot[x]+=tot[y];
        }
    }
}

void dfs_2(int x,int tp)
{
    top[x]=tp;image[x]=++len;fact[len]=x;
    if(son[x]) dfs_2(son[x],tp);
    for(int i=first[x];i;i=a[i].next)
    {
        int y=a[i].y;
        if(y!=fa[x] && y!=son[x]) dfs_2(y,y);
    }
}

void update(int &now,int l,int r)
{
    if(!now) now=++len;
    total[now]+=d;
    if(l==r)
    {
        maxx[now]=d;
        return;
    }
    if(v<=mid) update(lc[now],l,mid);
    else update(rc[now],mid+1,r);
    maxx[now]=max(maxx[lc[now]],maxx[rc[now]]);
}

void change_c(int x,int k)
{
    v=image[x];d=-w[x];
    update(rt[c[x]],1,n);
    c[x]=k;d=w[x];
    update(rt[c[x]],1,n);
}

void change_w(int x,int k)
{
    v=image[x];d=-w[x];
    update(rt[c[x]],1,n);
    d=w[x]=k;
    update(rt[c[x]],1,n);
}

int getsum(int now,int x,int y,int l,int r)
{
    if(l==x && r==y) return total[now];
    if(y<=mid) return getsum(lc[now],x,y,l,mid);
    else if(mid<x) return getsum(rc[now],x,y,mid+1,r);
    else return getsum(lc[now],x,mid,l,mid)+getsum(rc[now],mid+1,y,mid+1,r);
}

void get_sum(int x,int y)
{
    int tx=top[x],ty=top[y],ans=0,op=x;
    while(tx!=ty)
    {
        if(dep[tx]>dep[ty]) swap(x,y),swap(tx,ty);
        ans+=getsum(rt[c[op]],image[ty],image[y],1,n);
        y=fa[ty];ty=top[y];
    }
    if(dep[x]>dep[y]) swap(x,y);
    ans+=getsum(rt[c[op]],image[x],image[y],1,n);
    printf("%d\n",ans);
}

int getmax(int now,int x,int y,int l,int r)
{
    if(l==x && r==y) return maxx[now];
    if(y<=mid) return getmax(lc[now],x,y,l,mid);
    else if(mid<x) return getmax(rc[now],x,y,mid+1,r);
    else return max(getmax(lc[now],x,mid,l,mid),getmax(rc[now],mid+1,y,mid+1,r));
}

void get_max(int x,int y)
{
    int tx=top[x],ty=top[y],ans=0,op=x;
    while(tx!=ty)
    {
        if(dep[tx]>dep[ty]) swap(x,y),swap(tx,ty);
        ans=max(ans,getmax(rt[c[op]],image[ty],image[y],1,n));
        y=fa[ty];ty=top[y];
    }
    if(dep[x]>dep[y]) swap(x,y);
    ans=max(ans,getmax(rt[c[op]],image[x],image[y],1,n));
    printf("%d\n",ans);
}

int main()
{
    scanf("%d %d",&n,&m);
    memset(first,len=0,sizeof first);
    for(int i=1;i<=n;i++) scanf("%d %d",&w[i],&c[i]);
    for(int i=1;i<n;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        ins(x,y);
        ins(y,x);
    }
    len=0;dep[1]=1;dfs_1(1);
    len=0;dfs_2(1,1);
    len=0;
    for(int i=1;i<=n;i++)
    {
        v=image[i];d=w[i];
        update(rt[c[i]],1,n);
    }
    for(int i=1;i<=m;i++)
    {
        char s[10];
        int x,y;
        scanf("%s %d %d",s,&x,&y);
        if(s[1]=='C') change_c(x,y);
        if(s[1]=='W') change_w(x,y);
        if(s[1]=='S') get_sum(x,y);
        if(s[1]=='M') get_max(x,y);
    }
}
保姆级教程:如何将仅限客户端使用的免费大模型(Gemini、Antigravity、Qwen Code、Kiro 等)转为任何应用可调用的 OpenAI 兼容标准接口 大模型 API 费用太贵?💸 这篇文章分享一个薅羊毛神器,能把 Gemini、Qwen Code、Kiro 等客户端专属的免费大模型转换成标准 OpenAI 兼容接口 🔌。支持多协议互转、账户池管理、Web 管理界面,Docker 一键部署,零成本调用 Claude Opus 4.5、Gemini 3 Pro 等高级模型 ✅ 阅读详情

相关推荐

Claude Code 实战指南:从入门到高效编程

本文是一份Claude Code实战指南,旨在帮助开发者从入门到精通这款AI编程助手。文章详细讲解了如何通过清晰的指令公式与Claude Code高效沟通,并展示了如何将其深度集成到日常开发工作流中,例如理解陌生代码、调试和生成测试文档。指南还提供了避坑建议与最佳实践,并通过构建一个天气查询CLI工具的完整案例,演示了如何利用Claude Code加速开发进程,实现从设计到代码的高效人机协作。

weixin_28339967的博客 485

洛谷 P3313 [SDOI2014]旅行 题解

10^5个线段树动态开点+树链剖分

CofDoria的博客 388

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 390

洛谷P3313 [SDOI2014] 旅行【关于deepseek一遍A紫题这件事】

以后可以适当跟着AI学习分析思路,培养思维链。“用AI悠着点,容易把人用的懒得动脑” ——某帅气竞赛教练。

MorningLa的博客 975

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1553

利用 AI 自动生成 BDD(行为驱动开发)格式的 Gherkin 测试用例

文章摘要 当前BDD测试领域正经历AI驱动的变革浪潮。传统Gherkin用例编写面临四大痛点:语法负担重、场景发现成本高、一致性差和维护困难。2025-2026年,AI生成Gherkin的工具生态快速成熟,主要分为五类:测试管理平台内置AI(如TestRail 10.2)、Jira插件(如AssertThat BDD)、独立AI平台(如PrimeCompass)、CLI工具和研究原型。其中,TestRail实现生成-执行闭环,AssertThat采用多阶段Agent工作流提升质量,PrimeCompass则

ZXSXJ的博客 206

洛谷 P3313 [SDOI2014]旅行 解题报告

P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。...

weixin_30832143的博客 262

CUDA内核反汇编实战:用cuobjdump解锁SASS指令的奥秘

本文详细介绍了CUDA内核与SASS指令的关系,以及使用cuobjdump工具进行反汇编分析的方法。主要内容包括:1. CUDA内核的基本概念及其在GPU并行计算中的重要性;2. SASS指令作为底层汇编指令的关键作用;3. cuobjdump工具的安装配置和使用方法;4. 通过数组加法实例演示反汇编过程;5. 深入分析SASS指令格式、分类和执行流程;6. 两个实际案例展示性能优化和问题排查的应用。文章为开发者提供了深入理解CUDA程序底层执行机制的有效途径。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 439

BZOJ 3531 SDOI2014 旅行(travel) 树链剖分模板题

树链剖分模板题

YxuanwKeith的博客 1018

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

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

刘一说的IT专栏 542

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。

zhusl6688的博客 376

洛谷 P3313 [SDOI2014]旅行 树链剖分+动态开点线段树

P3313 这个题要根据每个城市信仰的宗教建线段树,但是这样的话最多会有1e5个线段树,所以要动态开点(其实就是主席树思想),先把树用重链剖分,剖出来每个点有在线段树上对应的区间,所以线段树共用这一套区间,问题就简单了,至于修改城市的宗教,只需把原来宗教那个线段树的对应区间清0,在修改后宗教的那个线段树再加上一个新的点就行。 #include&lt;cstdio&gt; #include&l...

ccsu_cat 291

网络速度的极致:800G & 1.6T 以太网的突破!

你好,这里是网络技术联盟站。在我们进入数据驱动的世界时,以太网的重要性日益突出。从根本上说,以太网是一种连接计算机的技术,旨在形成一个本地网,通过它,设备可以与其他设备进行通信。然而,随着时间的推移,以太网已经发展成为一种全球的数据通信系统,其速度从初始的10Mbit/s发展到现在的800G,甚至1.6T。这种巨大的进步并不是没有挑战的,但每一次的突破都代表了技术的巨大飞跃。本文将探讨800G和1.6T以太网的创新与挑战。

网络技术联盟站 1771

题解 [SDOI2014] 旅行(LOJ #2195 / 洛谷 P3313)【树链剖分 动态开点线段树】

题目链接:洛谷 P3313 / LOJ #2195 题意 一棵 nnn 个点的数,每个点有一个颜色 cic_ici​ 与权值 wiw_iwi​,mmm 次操作: 修改某个点的权值; 修改某个点的颜色; 查询 xxx 到 yyy 的路径上,颜色为 cxc_xcx​ 的所有点的权值和(保证 cx=cyc_x=c_ycx​=cy​); 查询 xxx 到 yyy 的路径上,颜色为 cxc_xcx​ 的所有点的最大值(保证 cx=cyc_x=c_ycx​=cy​)。 n,m,c≤105n,m,c\leq 10^5

破壁人五号的博客 240

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

洛谷P3313 [SDOI2014]旅行(树链剖分 动态开节点线段树)

题意 题目链接 Sol 树链剖分板子 + 动态开节点线段树板子 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second //#define int long long #define LL...

weixin_30363981的博客 107

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

洛谷 P3313 [SDOI2014]旅行

P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的...

HJ921004的博客 180

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

洛谷 P3313 [SDOI2014]旅行 树链剖分

题目描述 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不同的旅行...

liangzihao1的博客 224

[SDOI2014]旅行

洛谷 P3313 [SDOI2014]旅行 https://www.luogu.org/problem/show?pid=3313 题目描述 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他...

weixin_30517001的博客 93

树链剖分(一)-重链剖分:模板&例题

重链剖分的模板学习及基础模板练习

Mint_hexagram的博客 880

洛谷P3313 [SDOI2014]旅行

题目描述 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不

蒟蒻的博客 299

BZOJ3531 [Sdoi2014]旅行(洛谷P3313)

树链剖分 (线段树动态开点) BZOJ题目传送门 洛谷题目传送门 学了发线段树动态开点。 其实动态开点就是先不建树,每次修改的时候再往下建。这时左右儿子是编号的而不是原来的∗2∗2*2和∗2+1∗2+1*2+1。可以发现每次新建的节点数为lognlog⁡n\log n,那么总空间复杂度就是nlognnlog⁡nn\log n的。 这道题的话对每种颜色都开一个线段树。然后树剖上去+动态开点...

forezxl的博客 286

[SDOI2014]旅行,洛谷P3313,主席树+树链剖分

正题      我不喜欢旅行对不起      看到题目,就会知道有三个东西要维护,一个是路径,一个是评级,一个是宗教。      主要是宗教和评级之间的关系,要取路径上宗教为某个特定值的评级最大值或和。      想到用树链剖分来进行重新编号,使得一条重链上的编号连续,然后对于每一个评级,我们开一棵主席树(动态开点线段树无优化)。那么可以节省下来很多空间。      然后树链剖分来进行操作并统计答...

Deep_Kevin的娱乐空间 476

python去掉最后一行的换行符_python去掉行尾的换行符

对于改善 MySQL 数据装载操作有效率的方法是怎样多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当.相对来说,将数据装入数据库是直截了当的.然而,也存在可用来改善数据装载操作效率的策略,其基本原理如下 ...HTML5实现的视频播放器01HTML5实现的视频播放器 什么是hivideo? 最近一段时间在使用PhoneGap开发一个App应用,...

weixin_29149577的博客 1176
上一篇: 洛谷 P3157 [CQOI2011]动态逆序对(主席树+树状数组)
下一篇: NOIP2018游记
Dawn_LLLLLLL
博客等级 码龄9年 12粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值