【算法竞赛学习笔记】[SDOI2011]染色(路径染色+色段查询)

您所在的位置:网站首页 sacai染色 【算法竞赛学习笔记】[SDOI2011]染色(路径染色+色段查询)

【算法竞赛学习笔记】[SDOI2011]染色(路径染色+色段查询)

#【算法竞赛学习笔记】[SDOI2011]染色(路径染色+色段查询)| 来源: 网络整理| 查看: 265

title : [SDOI2011]染色(路径染色+色段查询) tags : ACM,数据结构 date : 2021-11-16 author : Linno

P2486 [SDOI2011]染色 题面

给一棵树,支持两种操作:

①给定u,v,w,将u到v的路径上所有节点染成颜色w。

②给定u,v,查询u到v路径上颜色段的数量。

树链剖分+线段树

树链剖分将无根树拍平后,用线段树去做。维护每个区间的左颜色、右颜色、色段和以及tag,如果合并的时候两端颜色一致,那么ans-1。

#include using namespace std; const int N=1e5+7; int n,m,col[N]; vectorG[N]; void addedge(int u,int v){ G[u].push_back(v); G[v].push_back(u); } int sz[N],dep[N],son[N],fa[N],bel[N],dfn[N],idfn[N],idx=0; inline void dfs1(int x){ sz[x]=1; for(int i=0;in>>m; for(int i=1;i>col[i]; for(int i=1;i>u>>v; addedge(u,v); } dfs1(1); dfs2(1,1); build(1,1,n); for(int i=1;i>op; if(op=='Q'){ cin>>u>>v; //路径查询 int res=0,Cson,Cfa; while(bel[u]!=bel[v]){ if(dep[bel[u]]w; //路径涂色 while(bel[u]!=bel[v]){ if(dep[bel[u]]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3