当前位置: 首页 > 编程日记 > 正文

BZOJ2631tree——LCT

题目描述

一棵n个点的树,每个点的初始权值为1。对于这棵树有q个操作,每个操作为以下四种操作之一:
+ u v c:将u到v的路径上的点的权值都加上自然数c;
- u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树;
* u v c:将u到v的路径上的点的权值都乘上自然数c;
/ u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数。

输入

第一行两个整数n,q
接下来n-1行每行两个正整数u,v,描述这棵树
接下来q行,每行描述一个操作

输出

对于每个/对应的答案输出一行

样例输入

3 2
1 2
2 3
* 1 3 4
/ 1 1

样例输出

4

提示

数据规模和约定

10%的数据保证,1<=n,q<=2000

另外15%的数据保证,1<=n,q<=5*10^4,没有-操作,并且初始树为一条链

另外35%的数据保证,1<=n,q<=5*10^4,没有-操作

100%的数据保证,1<=n,q<=10^5,0<=c<=10^4

LCT,splay每个点维护子树和,单点权值和两个区间修改标记,注意加法和乘法运算顺序即可。开unsigned int即可,开longlong可能会T。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll unsigned int
using namespace std;
int n,m;
int x,y,z,w;
int mod=51061;
char ch[2];
int f[100010];
int s[100010][2];
int st[100010];
int r[100010];
int size[100010];
ll sum[100010];
ll val[100010];
ll a[100010];
ll b[100010];
int get(int rt)
{return rt==s[f[rt]][1];
}
void change(int rt,int x,int y)
{if(!rt){return ;}sum[rt]=(sum[rt]*x+y*size[rt])%mod;val[rt]=(val[rt]*x+y)%mod;a[rt]=(a[rt]*x+y)%mod;b[rt]=(b[rt]*x)%mod;
}
void pushup(int rt)
{sum[rt]=(sum[s[rt][0]]+sum[s[rt][1]]+val[rt])%mod;size[rt]=(size[s[rt][0]]+size[s[rt][1]]+1)%mod;
}
void pushdown(int rt)
{if(r[rt]){swap(s[rt][0],s[rt][1]);r[s[rt][0]]^=1;r[s[rt][1]]^=1;r[rt]^=1;}int x=a[rt];int y=b[rt];a[rt]=0;b[rt]=1;if(x!=0||y!=1){change(s[rt][0],y,x);change(s[rt][1],y,x);}
}
int is_root(int rt)
{return s[f[rt]][0]!=rt&&s[f[rt]][1]!=rt;
}
void rotate(int rt)
{int fa=f[rt];int anc=f[fa];int k=get(rt);if(!is_root(fa)){s[anc][fa==s[anc][1]]=rt;}s[fa][k]=s[rt][k^1];f[s[fa][k]]=fa;s[rt][k^1]=fa;f[fa]=rt;f[rt]=anc;pushup(fa);pushup(rt);
}
void splay(int rt)
{int top=0;st[++top]=rt;for(int i=rt;!is_root(i);i=f[i]){st[++top]=f[i];}for(int i=top;i>=1;i--){pushdown(st[i]);}for(int fa;!is_root(rt);rotate(rt)){if(!is_root(fa=f[rt])){rotate(get(rt)==get(fa)?fa:rt);}}
}
void access(int rt)
{for(int x=0;rt;x=rt,rt=f[rt]){splay(rt);s[rt][1]=x;pushup(rt);}
}
void reverse(int rt)
{access(rt);splay(rt);r[rt]^=1;
}
void split(int x,int y)
{reverse(x);access(y);splay(y);
}
void link(int x,int y)
{reverse(x);f[x]=y;
}
void cut(int x,int y)
{reverse(x);access(y);splay(y);s[y][0]=f[x]=0;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){size[i]=val[i]=sum[i]=b[i]=1;}for(int i=1;i<n;i++){scanf("%d%d",&x,&y);link(x,y);}while(m--){scanf("%s",ch);scanf("%d%d",&x,&y);if(ch[0]=='+'){scanf("%d",&z);split(x,y);change(y,1,z);}else if(ch[0]=='-'){scanf("%d%d",&w,&z);cut(x,y);link(w,z);}else if(ch[0]=='*'){scanf("%d",&z);split(x,y);change(y,z,0);}else if(ch[0]=='/'){split(x,y);printf("%d\n",sum[y]);}}
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/9744732.html

相关文章:

MyBatis点滴积累

MyBatis在使用中不知不觉积累了很多经验1.#和$ MyBatis/Ibatis中#和$的区别1. #将传入的数据都当成一个字符串&#xff0c;会对自动传入的数据加一个双引号。如&#xff1a;order by #user_id#&#xff0c;如果传入的值是111,那么解析成sql时的值为order by "111", 如…

java可以调用python程序吗_我们可以从java调用python方法吗?

是的,那可以做到.通常,这将通过创建PythonInterpreter对象然后使用它来调用python类来完成.请考虑以下示例&#xff1a;Java&#xff1a;import org.python.core.PyInstance;import org.python.util.PythonInterpreter;public class InterpreterExample{PythonInterpreter inte…

【转】Hbuilder MUI 页面刷新及页面传值问题

文章来源&#xff1a;http://www.111cn.net/sys/CentOS/67213.htm 一、页面刷新问题 1.父页面A跳转到子页面B&#xff0c;B页面修改数据后再跳回A页面&#xff0c;刷新A页面数据(1).父页面A代码window.addEventListener("pageflowrefresh", function (e) {location.r…

第三次作业---读《构造之法》1-5章有感

这个作业的要求来自于&#xff1a;https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178。 第一章&#xff1a;概论 读完第一章了解到了什么是软件工程、软件工程的领域。软件工程是把系统的、有序的、可量化的方法应 用到软件的开发、运营和维护上的过程。软件工程包…

Solr安装与配置

需要Java Runtime Environment(JRE) 1.7或更高版本&#xff0c;先验证。 # java -version如果没有安装好Java环境&#xff0c;需要参考&#xff1a;http://blog.csdn.net/unix21/article/details/18774417无需安装tomcat,新版solr已经集成jettySolr最新版下载地址 http://mirro…

php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)

首先分别解释下,trim过滤字符串两端,rtrim过滤字符串尾部,chop()ltrim过滤字符串首部.过滤字符串中键的咚咚就只能用str_replace咯.举个例子说明下,PHP代码$str 123,333,234,;echo rtrim($str, ,);rtrim实例代码2$text "\t\tThese are a few words :) ... ";$trim…

TensorFlow王位不保?ICLR投稿论文PyTorch出镜率快要反超了

自PyTorch出道以来&#xff0c;不断有人表示&#xff0c;发现了这样的趋势&#xff1a; “学术圈正在慢慢地抛弃TensorFlow&#xff0c;转投PyTorch。” 如今&#xff0c;PyTorch 1.0发布&#xff0c;ICLR 2019也才截稿不久&#xff0c;又是讨论这个问题的好时节。 Reddit上面&…

php的hashmap,php如何实现hashmap

php实现hashmap的方法&#xff1a;主要方法参照JAVA的HASHMAP实现的Class HashMap{var $H_table;public function __construct() {$this->H_table array ();}public function put($key, $value) {if (!array_key_exists($key, $this->H_table)) {$this->H_table[$key…

Dispatcher与UI线程交互

1 this.chart2.Dispatcher.BeginInvoke(new Action(() > 2 { 3 this.chart2.SetData("Series1", lxs, lys, lzs); 4 })); 转载于:https://www.cnblogs.com/ants_double/p/5359476.html

Linux防火墙限制指定端口只能由指定IP访问

需要对redis的端口做限制&#xff0c;只能让公司内指定IP的机器访问-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACC…

Kubernetes基于Metrics Server的HPA

Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境&#xff1a; kubeadm安装的kubernetes1.11Horizontal Pod Autoscaler&#xff08;HPA&#xff0c;Pod水平自动伸缩&#xff09;&#xff0c;根据资源利用率或者自定义指标自动调整replicati…

Java判断文本文件编码格式以及读取

如果不是约定好的&#xff0c;要想解析txt文件就需要知道文件编码类型&#xff0c;由于文件编码类型众多&#xff0c;例如UTF-8&#xff0c;GBK&#xff0c;UTF-16,GB2312等等。其实有简单的办法&#xff0c;只需要这样就可以了String fileEncodeEncodingDetect.getJavaEncode(…

php 运维系统开发,PHP开发运维管理系统笔记

开发运维管理系统采用ThinkPHP框架mysql进行开发.框架配置return array(//‘配置项‘>‘配置值‘‘SHOW_PAGE_TRACE‘ > true,//允许访问的控制器‘MODULE_ALLOW_LIST‘ > array(‘Home‘),//默认控制器‘DEFAULT_MODULE‘ > ‘Home‘,//URL模式‘URL_MODEL‘ >…

[android]am自动化测试框架(原创)

在linux环境该目录下需要一个AndroidManifest.xml文件 需要一个python脚本就可以完成&#xff0c;功能点&#xff0c;打开某个package的所有activity并截图保存 import os import logging file open("AndroidManifest.xml") _adb_startActivity"adb shell am s…

Dubbo 整合 Pinpoint 做分布式服务请求跟踪

在使用Dubbo进行服务化或者整合应用后&#xff0c;假设某个服务后台日志显示有异常&#xff0c;这个服务又被多个应用调用的情况下&#xff0c;我们通常很难判断是哪个应用调用的&#xff0c;问题的起因是什么&#xff0c;因此我们需要一套分布式跟踪系统来快速定位问题&#x…

Memcached安装使用和源码调试

memcached官网&#xff1a;http://memcached.org/一.安装下载 # wget http://www.memcached.org/files/memcached-1.4.25.tar.gz解压 # tar xzvf memcached-1.4.25.tar.gz #cd memcached-1.4.25配置 #./configure --prefix/usr/local/memcached --with-libevent/usr 注意这里选…

上下或左右无缝滚动

文字或图片实现 向上 无缝滚动<div id"colee" style"overflow:hidden;height:80px;"><div id"colee1"><li><a href"/">文字或图片实现向上无缝滚动</a></li><li><a href"/"&g…

java老师拿钥匙,从Java中的NavigableMap获取第一把钥匙

要使用Java显示NavigableMap中的第一个键&#xff0c;请使用firstKey()方法。让我们首先创建NavigableMap-NavigableMap n new TreeMap();n.put("A", 498);n.put("B", 389);n.put("C", 868);n.put("D", 988);n.put("E", 68…

iphone X系列设配屏幕适配

2019独角兽企业重金招聘Python工程师标准>>> 截止目前&#xff0c;苹果所有刘海系列的设备屏幕数据如下&#xff1a; iPhone X 、iPhone XS&#xff1a; 5.8英寸&#xff0c; 375pt * 812pt(3x)&#xff0c;启动图1125px * 2436pxiPhone XR&#xff1a; 6.1英寸&…

Oracle官方教程之Fork/Join

原文链接&#xff0c;译文链接&#xff0c;译者&#xff1a;Zach&#xff0c;校对&#xff1a;郑旭东 fork/join框架是ExecutorService接口的一种具体实现&#xff0c;目的是为了帮助你更好地利用多处理器带来的好处。它是为那些能够被递归地拆解成子任务的工作类型量身设计的。…

《Java: The Complete Reference》等书读书笔记

春节期间读了下《Java: The Complete Reference》发现这本书写的深入浅出&#xff0c;我想一个问题&#xff0c;书中很多内容我们也知道&#xff0c;但是为什么我们就写不出这样一本书&#xff0c;这么全面&#xff0c;这么系统&#xff0c;这么简单易懂。不得不佩服Herbert Sc…

php upload ctf,强网杯CTF防御赛ez_upload Writeup

这是强网杯拟态防御线下赛遇到的web题目&#xff0c;本来是不打算分享Writeup的&#xff0c;但是由于问的人很多&#xff0c;于是这里分享给大家。ez_upload这题算是非常经典的堆叠black trick的题目&#xff0c;算是比较典型的ctf式题目(虽然现在大家都很抵制这样的题目)&…

Oracle 表空间扩容

2019独角兽企业重金招聘Python工程师标准>>> 1、查询当前表空间使用情况 col FILE_NAME format a50; col SPACE_NAME format a15; select b.file_name file_name,b.tablespace_name space_name, b.bytes/1024/1024 munM,(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 …

PHP网站首页打不开的原因讲起

最近有个网站首页打不开&#xff0c;偶尔报504错误&#xff0c;如图所示&#xff0c;这是nginx直接返回的。今天下午16:00多又出现了&#xff0c;看了下阿里云数据库连接&#xff0c;其实在晚上2:00也出现了一次。这个图是后来问题已经解决了获取的&#xff0c;数据库连接的请求…

前端资源整理 - 订阅、工具等

取自 我的GITHUB 的 fe-store-house repo&#xff0c;欢迎 PR&#xff0c;欢迎 STAR。原 repo 不定期更新&#xff0c;此文可能断更。断更了一年多&#xff0c;重新更新一下&#xff0c;似乎 sfgg 的文章渲染中 gfm table 解析有问题。最新更新时间 2017-11-02。前端资源 中文 …

mysql和mariadb可以同时使用吗,MariaDB与MySQL在一台服务器同时运行

[rootHE3 ~]#groupaddmariadb-g 513[rootHE3 ~]#useradd -u 513-gmariadb-s /sbin/nologin -d /home/mariadbmariadb从MariaDB官网下载二进制安装包至/root目录&#xff0c;本文采用的是目前最新稳定版mariadb-10.1.16[rootHE3 ~]# tar xvf mariadb-10.1.16-linux-x86_64.tar.g…

http请求与响应

一、请求格式 二、响应格式 转载于:https://www.cnblogs.com/believepd/p/10470824.html

Linux环境安装phpredis扩展

php访问redis需要安装phpredis扩展&#xff0c;phpredis是用纯C语言写的。phpredis下载地址 https://github.com/phpredis/phpredis 最新的版本是phpredis-develop.zip&#xff0c;我们选择的上一个稳定版2.2.7# wget https://github.com/nicolasff/phpredis/archive/2.2.7.tar…

IO流(文件的读写)---本文的正确性有待您验证。

2019独角兽企业重金招聘Python工程师标准>>> JAVA的I/O介绍。<<疯狂JAVA编程>>第15章有详细介绍&#xff0c;如下&#xff1a; http://www.cnblogs.com/lijunamneg/archive/2013/03/22/2975087.html import java.io.FileNotFoundException;import java.…

创建图像 php,详解php创建图像具体步骤

php 的图像处理在验证码是最常见的&#xff0c;下面说下使用php创建图像的具体步骤。简要说明&#xff1a;PHP 并不仅限于创建 HTML 输出&#xff0c; 它也可以创建和处理包括&#xff0c;&#xff0c;&#xff0c;以及在内的多种格式的图像。 更加方便的是&#xff0c;PHP 可以…