当前位置: 首页 > news >正文

20260403 紫题训练

T1

考虑树剖,线段树维护区间内的颜色段数和每个点的颜色。

查询时每次遇到不同链判断相邻的颜色是否相同,如果相同将答案减一。

#include<bits/stdc++.h>
#define N 100005
#define getc getchar
using namespace std;
int n,m;
class SGT{#define l(i) ((i)<<1)#define r(i) ((i)<<1|1)#define c(i) tr[i].cnt#define t(i) tr[i].tag#define lc(i) tr[i].lcol#define rc(i) tr[i].rcolprivate:struct node{int cnt,tag,lcol,rcol;}tr[N<<2];void up(int x){lc(x)=lc(l(x)),rc(x)=rc(r(x));c(x)=c(l(x))+c(r(x))-(rc(l(x))==lc(r(x)));}void down(int x){if(!t(x)) return;c(l(x))=c(r(x))=1;t(l(x))=t(r(x))=t(x);lc(l(x))=lc(r(x))=t(x);rc(l(x))=rc(r(x))=t(x);t(x)=0;}public:void upd(int ql,int qr,int v,int x=1,int l=1,int r=n){if(ql<=l&&qr>=r) return t(x)=lc(x)=rc(x)=v,c(x)=1,void();int mid=l+r>>1;down(x);if(ql<=mid) upd(ql,qr,v,l(x),l,mid);if(qr>mid) upd(ql,qr,v,r(x),mid+1,r);up(x);}int query(int ql,int qr,int x=1,int l=1,int r=n){if(ql<=l&&qr>=r) return c(x);int mid=l+r>>1;down(x);if(ql<=mid&&qr>mid)return query(ql,qr,l(x),l,mid)+query(ql,qr,r(x),mid+1,r)-(rc(l(x))==lc(r(x)));if(ql<=mid) return query(ql,qr,l(x),l,mid);if(qr>mid) return query(ql,qr,r(x),mid+1,r);return 0;}int get(int p,int x=1,int l=1,int r=n){if(l==r) return t(x);int mid=l+r>>1;down(x);if(p<=mid) return get(p,l(x),l,mid);return get(p,r(x),mid+1,r);}#undef l#undef r#undef c#undef t#undef lc#undef rc
}tr;
vector<int>s[N];
int dfn[N],top[N],hson[N];
int idx,a[N],fa[N],siz[N],dep[N];
void dfs1(int x){dep[x]=dep[fa[x]]+(siz[x]=1);for(auto p:s[x])if(p^fa[x]){fa[p]=x,dfs1(p);siz[x]+=siz[p];if(siz[p]>siz[hson[x]])hson[x]=p;}
}
void dfs2(int x,int t){dfn[x]=++idx;top[x]=t;if(hson[x]) dfs2(hson[x],top[x]);for(auto p:s[x])if(p^fa[x]&&p^hson[x])dfs2(p,p);
}
void upd(int u,int v,int c){while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]]) swap(u,v);tr.upd(dfn[top[u]],dfn[u],c),u=fa[top[u]];}if(dep[u]>dep[v]) swap(u,v);tr.upd(dfn[u],dfn[v],c);
}
int query(int u,int v){int res=0;while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]]) swap(u,v);res+=tr.query(dfn[top[u]],dfn[u]);res-=tr.get(dfn[top[u]])==tr.get(dfn[u=fa[top[u]]]);}if(dep[u]>dep[v]) swap(u,v);return res+tr.query(dfn[u],dfn[v]);
}
int main(){scanf("%d%d",&n,&m);for(int i=1,x;i<=n;i++) scanf("%d",a+i);for(int i=1,u,v;i<n;i++)scanf("%d%d",&u,&v),s[u].emplace_back(v),s[v].emplace_back(u);dfs1(1),dfs2(1,1);for(int i=1,x;i<=n;i++)tr.upd(dfn[i],dfn[i],a[i]);while(m--){char c=getc();int a,b,v;while(c!='C'&&c!='Q') c=getc();if(c=='C')scanf("%d%d%d",&a,&b,&v),upd(a,b,v);if(c=='Q')scanf("%d%d",&a,&b),printf("%d\n",query(a,b));}return 0;
}
http://www.jsqmd.com/news/583211/

相关文章:

  • 2026 知识付费 SaaS 选型:谁才是长期变现首选
  • 如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南
  • 推荐人证访客一体机品牌厂家,配高端来访人员预约+外来访客登记门禁管理系统 - 智能硬件-产品评测
  • hmailserver+Mysql邮件服务器环境搭建
  • 2026湖州装修公司怎么选?口碑、报价、服务全方位深度推荐指南 - GrowthUME
  • 企业级AI智能体平台技术评测:9款产品架构差异与生产落地能力分析
  • 2025-2026年全球美国移民公司评测:五家口碑服务推荐对比顶尖 - 十大品牌推荐
  • 【3步修复】华硕游戏本色彩配置文件丢失解决方案
  • 响课科技创始人李波指出:2026年是GEO爆搜玩法,要让Ai主动推荐您的企业、品牌、产品 - 速递信息
  • Claude Code--Ubuntu Linux超详细配置教程(附每步的可能报错及解决方法)
  • 遥控台灯方案开发案例,主控芯片8位MCU
  • 朝花夕拾:好题汇总
  • 2025-2026年国内十大移民机构评测:五家口碑服务推荐评价盘点 - 十大品牌推荐
  • 我的闲置 N5105 已封神!ESXi + 飞牛 NAS + 内网穿透,手搓小程专属全能云服务器
  • 什么是CPQ—CPQ生产报价管理 | 数字化报价解决方案
  • 基于 HT for Web 的机车整备场数字孪生系统技术实现
  • 2026年只会SpringBoot 和只会CRUD的Java 人第一批被优化,Java后端正在被Java AI 算法工程化 替代 【Java PyTorch深度学习】PyTorch On Java
  • 净化率≥95%:活性炭吸附箱废气处理成功案例 - 速递信息
  • C语言完美演绎6-18
  • 不再依赖翻译专员:跨马翻译让运营人员也能独立完成高质量多语言出图
  • 太空垃圾清理算法:近地轨道debug生死时速
  • 金融级数据底座:高频交易与防勒索架构解析
  • 全电发票普及,智蜂AI智能代账助力合规与高效
  • 2026 年 AI 寒冬:只会 SpringBoot 全部优化裁掉,公司上线 Java+AI 流水线,3 个人干原来 10 个人的活【Java PyTorch 深度学习】PyTorch On Java
  • 突破视频内容壁垒:B站视频转文字的智能解决方案
  • Claude封号潮下的开发者生存指南:从源码泄露到合规中转的全解析
  • 梦幻动漫魔法工坊效果实测:对比不同提示词的生成差异
  • 科研绘图工具分级指南:从新手到顶刊,这7款神器如何搭配?
  • 能源行业自动化解决方案选型,安全与降本双提升:2026企业级智能体选型指南
  • OpenCore Legacy Patcher完全指南:突破硬件限制让旧Mac焕发新生