[Luogu 2486] SDOI2011 染色

[Luogu 2486] SDOI2011 染色


树剖水题,线段树维护。

详细题解不写了。

我只想说我写的线段树又变漂亮了qwq


#include <algorithm>
#include <cstdio>
#include <cstring>
const int MAXN=100010;
int n,m;
class HLD
{private:bool vis[MAXN];int num;static int rank[MAXN];static struct Node{int v,depth,father,son,top,size,DFN;}s[MAXN];class SegmentTree{private:struct Node{int v,left,right,lazy,color[2];Node *c[2];Node(int l,int r):left(l),right(r),lazy(0){memset(color,0,sizeof color);c[0]=c[1]=nullptr;if(l==r){v=1;color[0]=color[1]=s[rank[l]].v;return;}int mid=l+r>>1;c[0]=new Node(l,mid);c[1]=new Node(mid+1,r);PushUp();}~Node(void){if(c[0]!=nullptr)delete c[0];if(c[1]!=nullptr)delete c[1];}void Modify(int x){v=1;lazy=color[0]=color[1]=x;}void PushUp(void){v=c[0]->v+c[1]->v;color[0]=c[0]->color[0];color[1]=c[1]->color[1];if(c[0]->color[1]==c[1]->color[0])--v;}void PushDown(void){if(c[0]!=nullptr)c[0]->Modify(lazy);if(c[1]!=nullptr)c[1]->Modify(lazy);lazy=0;}int Color(int x){if(left==right)return color[0];if(lazy)PushDown();int mid=left+right>>1;if(x>mid)return c[1]->Color(x);elsereturn c[0]->Color(x);}void Change(int l,int r,int v){if(l==left && r==right){Modify(v);return;}if(lazy)PushDown();int mid=left+right>>1;if(r<=mid)c[0]->Change(l,r,v);else if(l>mid)c[1]->Change(l,r,v);else{c[0]->Change(l,mid,v);c[1]->Change(mid+1,r,v);}PushUp();}int Query(int l,int r){if(l==left && r==right)return v;int mid=left+right>>1;if(lazy)PushDown();if(r<=mid)return c[0]->Query(l,r);else if(l>mid)return c[1]->Query(l,r);else{int ans=c[0]->Query(l,mid)+c[1]->Query(mid+1,r);if(c[0]->color[1]==c[1]->color[0])--ans;return ans;}}}*root;public:SegmentTree(int n){root=new Node(1,n);}~SegmentTree(void){delete root;}int Color(int x){return root->Color(x);}void Change(int l,int r,int v){root->Change(l,r,v);}int Query(int l,int r){return root->Query(l,r);}}*T;struct Edge{int to;Edge *next;Edge(int to,Edge* next):to(to),next(next){}~Edge(void){if(next!=nullptr)delete next;}}*head[MAXN];void AddEdges(int u,int v){head[u]=new Edge(v,head[u]);head[v]=new Edge(u,head[v]);}void DFS1(int u,int k){s[u].depth=k;s[u].size=1;int v;for(Edge *i=head[u];i!=nullptr;i=i->next)if(!s[v=i->to].size){DFS1(v,k+1);s[v].father=u;s[u].size+=s[v].size;if(s[v].size>s[s[u].son].size)s[u].son=v;}}void DFS2(int u,int top){s[u].top=top;s[u].DFN=++num;rank[num]=u;vis[u]=true;if(s[u].son)DFS2(s[u].son,top);int v;for(Edge *i=head[u];i!=nullptr;i=i->next)if(!vis[v=i->to])DFS2(v,v);}public:HLD(int n):num(0){memset(s,0,sizeof s);std::fill(head+1,head+n+1,nullptr);for(int i=1;i<=n;++i)scanf("%d",&s[i].v);for(int i=1,u,v;i<n;++i){scanf("%d %d",&u,&v);AddEdges(u,v);}DFS1(1,1);DFS2(1,1);T=new SegmentTree(n);}~HLD(void){for(int i=1;i<=n;++i)delete head[i];delete T;}void Change(int x,int y){int a,b,v;scanf("%d",&v);while((a=s[x].top)^(b=s[y].top))if(s[a].depth>s[b].depth){T->Change(s[a].DFN,s[x].DFN,v);x=s[a].father;}else{T->Change(s[b].DFN,s[y].DFN,v);y=s[b].father;}if(s[x].depth<s[y].depth)T->Change(s[x].DFN,s[y].DFN,v);elseT->Change(s[y].DFN,s[x].DFN,v);}void Query(int x,int y){int a,b,ans=0;while((a=s[x].top)^(b=s[y].top))if(s[a].depth>s[b].depth){ans+=T->Query(s[a].DFN,s[x].DFN);x=s[a].father;if(T->Color(s[a].DFN)==T->Color(s[x].DFN))--ans;}else{ans+=T->Query(s[b].DFN,s[y].DFN);y=s[b].father;if(T->Color(s[b].DFN)==T->Color(s[y].DFN))--ans;}ans+=s[x].depth<s[y].depth ? T->Query(s[x].DFN,s[y].DFN) : T->Query(s[y].DFN,s[x].DFN);printf("%d\n",ans);}
}*T;
int HLD::rank[MAXN];
HLD::Node HLD::s[MAXN];
int main(int argc,char** argv)
{scanf("%d %d",&n,&m);T=new HLD(n);char c;for(int i=1,x,y;i<=m;++i){scanf("\n%c %d %d",&c,&x,&y);if(c=='C')T->Change(x,y);elseT->Query(x,y);}delete T;return 0;
}

谢谢阅读。

转载于:https://www.cnblogs.com/Capella/p/9191205.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完全卸载HDP和Ambari

文章转载自&#xff1a;https://imaidata.github.io/blog/uninstall_hdp_ambari/ 用于个人学习、备查&#xff0c;转载请注明原作者。 简介&#xff1a; 在不需要重装操作系统的情况下完全卸载HDP&#xff0c;并准备好自动安装HDP2.6的环境。 文章&#xff1a; 升级HDP失败…

HBase 配置详解

文章转载自&#xff1a;http://blog.csdn.net/ningxuezhu/article/details/50547970 仅用于个人学习&#xff0c;收藏&#xff0c;作为资料备查&#xff0c;如需转载请注明原作者。 该文档是用hbase默认配置文件生成的&#xff0c;文件源是hbase-default.xml hbase.rootdir …

文件拷贝(字符、字节)

1.字节流byte&#xff1a;读入到字节数组后&#xff0c;返回一个长度len&#xff0c;如果没有读到数据&#xff0c;len-1 2.字符流char&#xff1a;同样是-1 3.代码生成器&#xff1a;null 一行一行地读 4.键盘录入&#xff0c;写入文件 5.构造器&#xff0c;追加用true 6.类…

HBae找不到协处理器导致RegionServer全部挂掉

一、问题背景&#xff1a; 跟兄弟单位公用一个大数据集群&#xff0c;通过Dataspace结合Kerberos控制数据的访问&#xff0c;我们生产环境中用到的OLAP工具Kylin&#xff0c;在升级Kylin的过程中&#xff0c;由于删除了旧的协处理器&#xff0c;导致原来数据继续去寻找目标协处…

Spark SQL的整体实现逻辑

1、sql语句的模块解析 当我们写一个查询语句时&#xff0c;一般包含三个部分&#xff0c;select部分&#xff0c;from数据源部分&#xff0c;where限制条件部分&#xff0c;这三部分的内容在sql中有专门的名称&#xff1a; 当我们写sql时&#xff0c;如上图所示&#xff0c;在进…

Mysql的高可用方案及主从详细配置

1、常用的高可用MySQL解决方案&#xff1a; 数据库作为最基础的数据存储服务之一&#xff0c;在存储系统中有着非常重要的地位&#xff0c;因此要求其具备高可用性无可厚非。能实现不同SLA(服务水平协定)的解决方案有很多种&#xff0c;这些方案可以保证数据 库服务器在硬件或…

vue3+element plus组件库中el-carousel组件走马灯特效,当图片变动时下面数字也随着图片动态变化

1.效果图 2.html <section style"height:30%"><div class"left-img1-title"><img src"../assets/img/title.png"alt""srcset""><div class"text">回收垃圾数量</div></div>…

数据库MySQL/mariadb知识点——数据类型

数据类型 所谓的列类型&#xff0c;其实就是指数据类型&#xff0c;即对数据进行统一的分类&#xff0c;从系统的角度出发是为了能够使用统一的方式进行管理&#xff0c;更好的利用有限的空间。 在 SQL 中&#xff0c;将数据类型分成了三大类&#xff0c;分别为&#xff1a;数值…

HDFS查看文件的前几行-后几行-行数

随机返回指定行数的样本数据 hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | shuf -n 5 返回前几行的样本数据 hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | head -100 返回最后几行的样本数据 hadoop fs -cat /test/gonganbu/scene_anal…

psql: FATAL the database system is in recovery解决

报错&#xff1a; FATAL: the database system is in recovery mode 解决思路&#xff1a; 在hawq master节点 1、执行hawq state &#xff0c;提示 database is down 2、查看hawq master进程&#xff1a; ps aux | grep postgresql &#xff0c;发现master进程不在 3、查…

软件工具组功能逆向工程设想

背景&#xff1a;昨天小智公布了软件工具组现在的几个项目组&#xff0c;大概罗列了现阶段软件工具组的主要职能&#xff0c;总结起来说就是将现有设计方案生成渲染图、全景图、视频、CAD等&#xff0c;看完所有这些功能我不禁设想了一下&#xff0c;如果软件工具组的功能逆向工…

FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)

问题描述&#xff1a; 在安装greenplum&#xff0c;执行gpssh-exkeys过程中抛出异常 Incompatible ssh peer (no acceptable kex algorithm) 原因&#xff1a; 由于ssh 6.7以上屏蔽不安全算法 解决&#xff1a; 在/etc/ssh/sshd_config最后加上 KexAlgorithms curve25519…

集群监控之Ganglia的部署

转载地址&#xff1a;https://www.slothparadise.com/how-to-install-ganglia-on-centos-7/ 找了一堆文章&#xff0c;全都误导了&#xff0c;这篇正解。 总结步骤如下&#xff1a; 1、server端 &#xff1a; yum install -y ganglia-gmetad ganglia-web ganglia-gmond rrd…

期货大赛项目|九,fileinput插件的应用

引入JS和CSS bundles.Add(new ScriptBundle("~/bundles/fileinputJs").Include( "~/Content/vendors/bootstrap-fileinput-master/js/fileinput.min.js", "~/Content/vendors/bootstrap-fileinput-master/js/locales/zh.js", "~/Scripts/fi…

redis见解

http://blog.csdn.net/zhiguozhu/article/details/50517527Redis原生session与redis中的session区别原生session在服务器上是以文件的形式存储的&#xff0c;所以其有一些磁盘io上的缺点 1&#xff09; 有哪几种类型的数据结构String——字符串  value 不仅可以是 String&…

快速解读GC日志

文章转载自&#xff1a;http://blog.csdn.net/renfufei/article/details/49230943 本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容。文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。我们通过 -XX:UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使…

HBase meta元数据损坏导致hbase master初始化失败

故障起因&#xff1a; 跑kylin任务&#xff0c;过程出错&#xff0c;异常信息&#xff1a;Direct buffer memory&#xff0c; java.io.IOException: java.lang.OutOfMemoryError: Direct buffer memoryat org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.ha…

HBase shell执行批量脚本

场景描述&#xff1a; HBase namespace中有大量无用的小表&#xff0c;占用了过多的block&#xff0c;需要批量删除&#xff0c;了解了一下有两种方式&#xff1a; 1、使用通配符 用drop命令可以删除表。在删除一个表之前必须先将其禁用。 hbase(main):018:0> disable em…

时间序列分析综述

一.基本分类 1.单变量的传统时间序列分析 2.单变量的随机时间序列分析 3.多变量的时间序列分析 建立在回归基础上的两变量序列分析 建立在AR基础上的多变量序列分析 4.截面时序数据结合的分析 转载于:https://www.cnblogs.com/xyp666/p/9220667.html

Ubuntu开启允许root用户远程登录

SSH服务器&#xff0c;可以通过SSH协议来访问远程服务器&#xff0c;代替telnet和ftp。但是ubuntu默认是不启用root用户也不允许root远程登录的。所以需要先启用root用户 1、启用root用户&#xff1a; 第一步 sudo passwd root //修改密码 第二步&#xff1a; vim /usr…