19-10-19-I
中午考试困够呛。
T1
我想打矩阵快速幂,然后我咕了
T2
打T1了所以又咕了。
T3
每一个黑点更新答案只有两种方式:
- 更新子树。
- 更新父链上的兄弟,叔伯,……
于是:
把树拍在$DFS$序上。
更新子树,区间修改。
更新父链,就需要用$DFS$序的拆分,修改两个部分。
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111
#define lc(k) (k<<1)
#define rc(k) (k<<1|1)
using namespace std;
struct SR{
int next,t;
}rs[N*2];
int fl[N],cnt=0;
struct XDS{
int l,r;
int dat,lz;
}rt[4*N];
int fir[N],las[N],wi[N];
int dfsxu[2*N];
int dfcnt=0;
int fa[N],pn,qn;
bool is_v[N];
void add(int f,int t){
rs[cnt].t=t;
rs[cnt].next=fl[f];
fl[f]=cnt++;
}
void build(int k,int l,int r){
// cout<<k<<" "<<l<<" "<<r<<endl;
rt[k].l=l,rt[k].r=r;
rt[k].dat=0;
if(l==r)return ;
int mid=(l+r)/2;
build(lc(k),l ,mid);
build(rc(k),mid+1,r );
}
void downlz(int k){
if(rt[k].l!=rt[k].r && rt[k].lz!=0){
int val=rt[k].lz;
rt[lc(k)].lz=max(rt[lc(k)].lz,val);
rt[rc(k)].lz=max(rt[rc(k)].lz,val);
rt[lc(k)].dat=max(rt[lc(k)].dat,val);
rt[rc(k)].dat=max(rt[rc(k)].dat,val);
rt[k].lz=0;
}
}
void change(int k,int l,int r,int v){
if(l>r)return ;
downlz(k);
if(l<=rt[k].l && rt[k].r<=r){
rt[k].lz=v;
rt[k].dat=max(rt[k].dat,v);
return ;
}
int mid=(rt[k].l+rt[k].r)/2;
if(mid>=l)
change(lc(k),l,r,v);
if(mid<r)
change(rc(k),l,r,v);
rt[k].dat=max(rt[lc(k)].dat,rt[rc(k)].dat);
}
int query(int k,int l,int r){
if(l>r)return 0;
int ans=0;
downlz(k);
if(l<=rt[k].l && rt[k].r<=r)
return rt[k].dat;
int mid=(rt[k].l+rt[k].r)/2;
if(mid>=l)
ans=max(ans,query(lc(k),l,r));
if(mid<r)
ans=max(ans,query(rc(k),l,r));
return ans;
}
void dfs(int k,int pre){
dfcnt++;
dfsxu[dfcnt]=k;
fir[k]=dfcnt;
for(int i=fl[k];i!=-1;i=rs[i].next){
int t=rs[i].t;
if(t!=pre){
fa[t]=k;
dfs(t,k);
}
}
dfcnt++;
dfsxu[dfcnt]=k;
las[k]=dfcnt;
}
int main(){
// freopen("lca3.in","r",stdin);\
freopen("1.out","w",stdout);
int a,b;
char st[10];
memset(fl,-1,sizeof fl);
scanf("%d%d",&pn,&qn);
for(int i=1;i<=pn;i++)
scanf("%d",wi+i);
for(int i=1;i<pn;i++){
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,0);
// for(int i=1;i<=pn*2;i++)\
cout<<dfsxu[i]<<" ";\
cout<<endl;
build(1,1,pn*2);
for(int i=1;i<=qn;i++){
scanf("%s%d",st,&a);
if(st[0]=='M'){
change(1,fir[a],las[a],wi[a]);
// cout<<fir[a]<<"="<<las[a]<<endl;
while(fa[a]!=0){
// cout<<"A:"<<a<<" FAA:"<<fa[a]<<" wi:"<<wi[fa[a]]<<endl;
change(1,fir[fa[a]],fir[a]-1,wi[fa[a]]);
// cout<<fir[fa[a]]<<" "<<fir[a]-1<<endl;
change(1,las[a]+1,las[fa[a]],wi[fa[a]]);
// cout<<las[a]+1<<" "<<las[fa[a]]-1<<endl;
if(is_v[a])break;
is_v[a]=1;
a=fa[a];
}
}
else {
int ans=query(1,fir[a],fir[a]);
printf("%d\n",ans==0?-1:ans);
}
}
}
19-10-19-I的更多相关文章
- 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定
[源码下载] 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定 作者:we ...
- Scrum会议10.19
Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 宫丽君 汪东涵 时间:2016.10.19 已完成内容: 1.完成新项目的查找,查找学姐的代码和项目. 2.理 ...
- IDC Digital Transition Annual Festival(2018.10.19)
时间:2018.10.19地点:北京万达文化酒店
- 2018.10.19浪在ACM 集训队第一次测试赛
2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...
- 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)
20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
- Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24
作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ...
- [Linux] 在 Ubuntu 19.10 上开启 SSH 服务并允许远程登录
在 Ubuntu 19.10 上安装 SSH,并开启服务 0.检查并确认系统当前是否已安装SSH: sudo ps -e | grep ssh 如果只有 ssh-agent 说明 ssh-server ...
- [Linux] 树莓派 4B 安装 Ubuntu 19.10 (Eoan Ermine) IOT 版
硬件:Raspberry Pi 4B系统:Ubuntu 19.10 (Eoan Ermine) for IOT官网:https://ubuntu.com/download/iot/raspberry- ...
- Ubuntu 19.10 安装 jupyter
安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...
- Ubuntu 19.10将使用GCC 9作为默认编译器
作为我们这一周期一直期待的变化,Ubuntu 19.10升级到GCC 9作为GCC 8的默认系统编译器. Ubuntu 19.10(和Ubuntu 20.04 LTS)将使用GCC 9 stable作 ...
随机推荐
- js--判断当前环境是否为app环境
/** *判断是否是app环境 */ function getIsApp () { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/ ...
- hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数.问你能不能分配,如果能,输出具体的分配方案. 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分 ...
- POJ-2499-Binary Tree-思维题
Background Binary trees are a common data structure in computer science. In this problem we will loo ...
- PHP面向对象编程题(方法的实践)
<?php header('content-type:text/html;charset=utf-8'); /*设计一个peron类(有名字,年龄和蛋糕三个属性) 蛋糕一共1000块,是所有人共 ...
- 配置vue项目的自定义config.js
[1]不采用脚手架的config文件夹中的配置文件 [2]在static文件夹下,自定义一个congfig.js文件 // 配置开发环境下服务器地址 window.Glod = { pmsApiUrl ...
- SQL中的左连接与右连接,内连接有什么不同
SQL中的左连接与右连接,内连接有什么不同 我们来举个例子.天庭上面有一个管理系统:管理系统有个主表:主表记录着各个神仙的基本信息(我们把它当成表A).还有个表记录着他们这个神仙的详细信息(我们把它当 ...
- new linux setup, yum command
7 yum list 9 cd /etc/yum.repos.d/ 55 history | grep yum 56 yum -y list screen* 57 yum -y instal ...
- input 数值验证
1.手动校验数字为整数 Number.isInteger <el-input class="radioInput" v-model.number="ruleForm ...
- SaaS加速器,到底加速了谁? 剖析阿里云的SaaS战略:企业和ISV不可错过的好文
过去二十年,中国诞生了大批To C的高市值互联网巨头,2C的领域高速发展,而2B领域一直不温不火.近两年来,在C端流量饱和,B端数字化转型来临的背景下,中国越来越多的科技公司已经慢慢将触角延伸到了B端 ...
- csp-s模拟测试10.1(b)X 国的军队,排列组合, 回文题解
题面:https://www.cnblogs.com/Juve/articles/11615883.html X 国的军队: 好像有O(T*N)的直接贪心做法 其实多带一个log的二分也可以过 先对所 ...