【GDSOI 2017】【JZOJ 5107】中学生数据结构题

国际大学生程序设计竞赛例题解 8 广东省信息学奥林匹克竞赛试题(2007-2009年).pdf 立即下载

Description

给出一棵带权有根树,要求:
1. 树上的路径区间加
2. 树上路径区间查询和
3. 树上路径整体旋转一位(如:原路径上的权值依次是这样的:1,2,3,4,操作完后变成:4,1,2,3)

n<=100000
时限:2S

Solution

这显然是链剖套Splay嘛,
旋转就相当于删掉最后一个,加到前面去,

听说LCT更简单

复杂度:O(nlog(n))

Code

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
using namespace std;
typedef long long LL;
const int N=100500;
int read(int &n)
{
    char ch=' ';int q=0,w=1;
    for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n,ans;
int B[2*N][2],A[N],B0;
struct qqww
{
    int fa,lt,zx,si,c;
}a[N];
struct qwqw
{
    int l,r,fa,si,la;
    LL v,sum;
}b[N];
int root,b0;
void link(int q,int w)
{
    B[++B0][0]=A[q];A[q]=B0,B[B0][1]=w;
    B[++B0][0]=A[w];A[w]=B0,B[B0][1]=q;
}
int dfsf(int q,int fa,int c)
{
    a[q].fa=fa,a[q].si=1;a[q].c=c;
    efo(i,q)if(B[i][1]!=fa)a[q].si+=dfsf(B[i][1],q,c+1);
    return a[q].si;
}
void dfs(int q,int fa,int lt)
{
    a[q].lt=(lt?lt:lt=q);
    a[q].zx=++b0;
    int mx=0;
    efo(i,q)if(B[i][1]!=fa)if(a[mx].si<a[B[i][1]].si)mx=B[i][1];
    if(mx)dfs(mx,q,lt);
    efo(i,q)if(B[i][1]!=fa&&B[i][1]!=mx)dfs(B[i][1],q,0);
}
bool SD(int q){return q==b[b[q].fa].r;}
void merge(int q)
{
    b[q].si=b[b[q].l].si+1+b[b[q].r].si;
    b[q].sum=b[b[q].l].sum+b[q].v+b[b[q].r].sum;
}
void doit(int q)
{
    if(!b[q].la)return;
    b[q].v+=b[q].la;
    b[q].sum+=(LL)b[q].si*(LL)b[q].la;
    if(b[q].l)b[b[q].l].la+=b[q].la;
    if(b[q].r)b[b[q].r].la+=b[q].la;
    b[q].la=0;
}
void rotate(int q)
{
    int t=b[q].fa;
    if(!SD(q))
    {
        b[t].l=b[q].r;
        b[b[q].r].fa=t;
        b[q].r=t;
    }else
    {
        b[t].r=b[q].l;
        b[b[q].l].fa=t;
        b[q].l=t;
    }
    if(SD(t))b[b[t].fa].r=q;
    else b[b[t].fa].l=q;
    b[q].fa=b[t].fa;
    b[t].fa=q;
    merge(t);
    merge(q);
    b[0].l=b[0].r=b[0].fa=0;
}
int Splay(int q,int T)
{
    while(b[q].fa!=T)
    {
        if(b[b[q].fa].fa!=T)
            if(SD(q)==SD(b[q].fa))rotate(b[q].fa);
            else rotate(q);
        rotate(q);
    }
    if(!T)root=q;
}
int search(int q,int w)
{
    doit(b[q].l),doit(b[q].r);
    if(b[b[q].l].si>=w)return search(b[q].l,w);
    w-=b[b[q].l].si+1;
    if(!w)return q;
    return search(b[q].r,w);
}
void changea(int q,int w,int e)
{
    Splay(search(root,q-1),0);
    Splay(w=search(root,w+1),root);
    b[b[w].l].la+=e;
    doit(b[w].l);
    merge(w),merge(root);
}
LL Gsum(int q,int w)
{
    Splay(search(root,q-1),0);
    Splay(w=search(root,w+1),root);
    return b[b[w].l].sum;
}
int DLT(int q)
{
    Splay(search(root,q-1),0);
    Splay(q=search(root,q+1),root);
    int ans=b[q].l;
    b[b[q].l].fa=0;b[q].l=0;
    merge(q),merge(root);
    return ans;
}
void IST(int q,int w)
{
    Splay(search(root,q),0);
    b[w].l=0;b[w].r=b[root].r;b[w].fa=root;
    b[root].r=w;if(b[w].r)b[b[w].r].fa=w;
    merge(w),merge(root);
}
void SWAP_v(int q,int w)
{
    if(q>w)swap(q,w);
    Splay(q=search(root,q),0);
    Splay(w=search(root,w),root);
    swap(b[q].v,b[w].v);
    merge(w),merge(q);
}
void modifya(int q,int w,int e)
{
    while(a[q].lt!=a[w].lt)
    {
        if(a[a[q].lt].c<a[a[w].lt].c)swap(q,w);
        int t=a[q].lt;
        changea(a[t].zx,a[q].zx,e);
        q=a[t].fa;
    }
    if(a[q].c<a[w].c)swap(q,w);
    changea(a[w].zx,a[q].zx,e);
}
LL find(int q,int w)
{
    LL ans=0;
    while(a[q].lt!=a[w].lt)
    {
        if(a[a[q].lt].c<a[a[w].lt].c)swap(q,w);
        int t=a[q].lt;
        ans+=Gsum(a[t].zx,a[q].zx);
        q=a[t].fa;
    }
    if(a[q].c<a[w].c)swap(q,w);
    return ans+Gsum(a[w].zx,a[q].zx);
}
int c1[N][2],c2[N][2],c10,c20;
void change_shift(int q,int w)
{
    if(q==w)return;
    swap(q,w);c10=c20=0;
    while(a[q].lt!=a[w].lt)
    {
        if(a[a[q].lt].c>a[a[w].lt].c)c1[++c10][0]=q,c1[c10][1]=a[q].lt,q=a[a[q].lt].fa;
        else c2[++c20][1]=w,c2[c20][0]=a[w].lt,w=a[a[w].lt].fa;
    }
    if(a[q].c>a[w].c)c1[++c10][0]=q,c1[c10][1]=w;
        else c2[++c20][1]=w,c2[c20][0]=q;
    q=w=0;
    fo(i,1,c10)
    {
        q=c1[i][0],w=c1[i][1];
        int q1=DLT(a[q].zx);
        IST(a[w].zx-1,q1);
        if(i!=c10)SWAP_v(a[w].zx,a[c1[i+1][0]].zx);
    }
    int t=w;
    for(;c20;c20--)
    {
        q=c2[c20][0],w=c2[c20][1];
        if(t)SWAP_v(a[t].zx,a[q].zx);
        int q1=DLT(a[q].zx);
        IST(a[w].zx-1,q1);
        t=w;
    }
}
int main()
{
    freopen("shift.in","r",stdin);
    freopen("shift.out","w",stdout);
    int q,w,e;
    read(n);
    fo(i,1,n-1)read(q),read(w),link(q,w);
    dfsf(1,0,1);
    b0=root=1;
    dfs(1,0,0);
    fo(i,1,n+1)b[i].r=i+1,b[i+1].fa=i,b[i].si=n+2-i+1;
    b[n+2].si=1;b0++;
    read(m);
    fo(i,1,m)
    {
        char ch=' ';
        while(ch<'A'||ch>'Z')ch=getchar();
        if(ch=='A')
        {
            read(q),read(w),read(e);
            modifya(q,w,e);
        }else if(ch=='S')
        {
            read(q),read(w);
            change_shift(q,w);
        }else
        {
            read(q),read(w);
            printf("%lld\n",find(q,w));
        }
    }
    return 0;
}
SE模块理解+SE-Resnet模块pytorch实现 文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模 阅读详情

相关推荐

Windows中的TLS 1.2启用方法(IIS、C#、.Net framework)

折腾几天了windows中的tls1.2启用方法!特此记录一下 开发背景: 在一个用.net framework 2.0开发的客户端程序里面嵌入功能调用第三方物联网相关接口,服务器上有一个restful接口用于接收第三方上报的数据及处理,最后再调用第三方的物联网相关接口。本机开发环境Windows 10,客户服务器是Windows Server 2008 R2。 第一次写这种物联网相关的接口调用,而且第三方提供的文档比较简单,最基本的报文示例都没。开发环境里面各种摸索一步一个坑,首先在发送HTTP请求前

dl1314ld的博客 1万+

GDOI&&GDSOI总结

DAY1:第一题: 一眼的KMP,直接打一坨KMP然后直接做就可以了,第一天成功签到。 第二题: 看了半天的题目,结果并没有看懂题,其实题目还是挺简单的,所以在不确定题目意思的情况下,只能随便理解一下题目打个暴力,为了不浪费时间,就知道了在不确定题目下的暴力(结果题意理解的是对的),因为怕题目理解错,所以不敢打正解。后来还是拿到了20. 第三题: 一眼的后缀自动机,所以直接构建完后缀自动机

Facico的博客 1827

卫星图像检测,分割,跟踪,超分辨率,数据集调研,以及论文笔记

目标检测,针对物体有很多类如桥,烟囱,罐子等,有静态图像下的检测,也就是图像源头多来自谷歌地图,但是前后帧没有任何联系,并且谷歌地图相对来说比较清楚,难度小一点,也有粗粒度以及较细粒度的检测,然后卫星视频的数据集较少,则可以通过前后帧的联系来辅助检测,并且卫星帧基本上只对车,船,飞机,火车进行检测,没有进行细粒度的检测即将车辆分类为卡车,皮卡,小轿车,但是关船,则可以分类为货船以及军舰,因为目前的卫星视频中小车实在太少了,难以进行更细粒度的检测。luojia 三号卫星。

zhangzhao147的博客 4707

【GDSOI2019】总结

Day 1 进入考场的时候相当紧张,只好靠音乐来缓解。 电脑非常的卡,保存、编译都卡半天,ctrl+W居然还被重定向到打开一个什么猎奇玩意 做题效率– 看T1 思索一段时间,居然不会! 考场内迟迟没有想起键盘声 果然今年画风突变,往年的送分签到题没有了。 花了大概1.5h把前三题看完,只有T3是会的 T2暴力非常清晰,先去写了T2暴力。 接下来肝T1,明知道这是个高维前缀和,但是对这东西不是很熟练...

Never give in. 610

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

生信实战:用bcftools玩转VCF文件处理(从压缩到注释全流程)

本文详细介绍了使用bcftools处理VCF文件的全流程实战指南。从数据准备、压缩索引、信息提取、质量统计到核心的变异过滤与功能注释,手把手教你高效管理基因组变异数据。重点阐述了如何利用bcftools进行VCF文件注释,整合外部数据库信息,为变异位点添加关键的生物学标签,是生物信息学数据分析的必备技能。

rgv23456789的博客 341

【GDSOI2017】 中学生数据结构题

DescriptionData ConstraintSolution看到SHIFT操作,很显然就想到了splay中的翻转操作,还在树上,我们就考虑LCT。 但想了一会我们发现,直接SHIFT操作会破坏LCT树中的点与点的连接关系。 于是我们考虑维护两颗LCT,一颗维护树的形态,一颗维护树中的权值,保证对于一个维护树的形态的LCT中的splay,维护树中权值的LCT中都有一个大小相同的与之对应的s

dance in th dark的博客 719

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

unique_sir的博客 1万+

【GDSOI2017】中学生数据结构题

DescriptionInput第一行有一个整数 N,表示 S 国城市的数量。 接下来有 N-1 行,每行两个数 u,v 表示一条道路。 第 N+1 行为一个整数 Q,表示接下来有 Q 个操作。 接下来有 Q 行,每行表示一个操作,格式如题目描述所示。 Output对于每一个 QUERY 操作,输出一个数,表示询问的当前编号为 X 和编号为 Y 的城市的最短路径间的城市 (包括编号为 X 的城

Jacky35 564

orchestrator常见问题汇总

默认的取集群名称的规则为参数决定 ,默认为取主实例 主机名 ,然后按分隔符"."之前的第一段字符为集群别名,这样在集群主库宕机后,新提升的从库的服务器名称为了新的集群名,宕机的主库成为单独的一个集群。1 默认配置文件中设置了匹配规则 ,只有被匹配的主机名才能进行故障恢复,所以该参数需要设置为 "*"3 另外配置文件中还有许多发现,恢复的忽略规则(Ignore) 这些参数也是需要注意的。由于LVS的后端的RS为IP地址,如果直接显示主机名,LVS的接口方法将无法工作。只传入脚本中用到的参数,不要多传入。

DBA之路的博客 829

Go语言Gin框架项目:从零到一搭建一个用户管理系统

本文介绍了一个基于Go语言Gin框架开发的用户管理系统。系统采用MySQL数据库存储数据,使用Bootstrap 5构建现代化UI界面,实现了完整的CRUD功能。主要特点包括:RESTful API设计、前后端双重表单验证、实时搜索功能、SQL防注入措施以及响应式布局。项目结构清晰,包含数据库配置、用户模型、处理器和前端模板等模块。系统提供用户列表展示、新增/编辑表单、删除确认等功能,通过参数化查询确保安全性,并支持按姓名或邮箱搜索用户。

数据知道的博客 3995

【GDSOI2017】 逃亡

Description 一棵树有N个点,每个点有两个属性a,b,a已知,b未知一个点u,会对它子树内的任意一点v发动a[u]次战争,当且仅当b[u]>b[v]0<=bi<=m,对于j=0~k,求有多少种方案,使得发动的战争次数恰好为j0 < n ≤ 14, k ≤ 20, 0 ≤ m ≤ 100000000, 0 ≤ ai, bi ≤ m Analysis看到这种数据范围很容易想到状压 首先就可以发

LYD729 594

INCA ProF文件解析

本博文从实际应用出发,介绍INCA prof文件的关键信息,通过实例,描述当得到一个刷写需求后,如何在不改变用户之前的使用习惯的前提下,满足原有的INCA刷写应用数据和标定程序的需求。 声明:本文不涉及项目名称,没有商业目的,纯属分享技术,乐享知识。

汽车电子软件领域知识分享 1万+

JZOJ 5107. 【GDSOI2017】 中学生数据结构题

Description Input 第一行有一个整数 N,表示 S 国城市的数量。 接下来有 N-1 行,每行两个数 u,v 表示一条道路。 第 N+1 行为一个整数 Q,表示接下来有 Q 个操作。 接下来有 Q 行,每行表示一个操作,格式如题目描述所示。 Output 对于每一个 QUERY 操作,输出一个数,表示询问的当前编号为 X 和编号为 Y 的城市的最短路径间的城市 (包括编号为...

Felix-Lee的博客 774

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【GDSOI 2016】互补约数

DescriptionSolution看到对于gcd的求和就知道是关于莫比乌斯繁衍的题目。 先来看一看要求什么:所有数分解成两个相乘的数的gcd,那么我们可以直接枚举那些相乘的数。 所以 ans=∑i=1n∑j=1⌊ni⌋gcd(i,j)ans=\sum_{i=1}^n\sum_{j=1}^{\lfloor{n\over i}\rfloor}gcd(i,j) 和一般的莫比乌斯繁衍的长得很像,

Facico的博客 1093

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【GDSOI 2016】第一题 互补约数

Description简化题意:求 ∑i=1n∑j|igcd(j,ij)\sum _{i=1}^n \sum_{j|i} gcd(j,{i\over j})Input输入包含一行,一个正整数 n。Output输出只有一行, F(n)。Sample InputSample Input1: 10Sample Input2: 1000Sample OutputSample Output1: 32S

Jacky35 477

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【jzoj5069】【GDSOI2017第二轮模拟】【蛋糕】【莫比乌斯反演】【杜教筛】

题目大意 CJY很喜欢吃蛋糕,于是YJC弄到了一块蛋糕,现在YJC决定和CJY分享蛋糕。 这块蛋糕上有n^2颗葡萄干,排成了一个n*n的点阵,每颗葡萄干互不相同且被编号为1~n^2。YJC决定沿着一条直线把蛋糕切成两份。YJC和CJY都很喜欢吃葡萄干,所以切出的两份蛋糕必须都包含至少一颗葡萄干。同时他们都不希望吃到不完整的葡萄干,所以切的时候不能经过任意一颗葡萄干。CJY喜欢1号葡萄干,所以他

inklutcuah’s blog 796

GDSOI2017模拟

今天真的炸穿了。 t1,由于没打过轮廓线dp+没完全听懂xdl的课(觉得插头dp考了也不会,可能听得不太认真,也是连简单的轮廓线dp也没学会),于是比赛中想到了如何把状态压成3进制,却愣是只能O(2^m)去转移,原来只要一个位置一个位置去转移就可以O(1)转移了。这个平时留下的坑,幸好在这次被发现了,有所填补。 t3,由于一开始有点想法,于是几乎花了所有的时间,关键一开始没想清楚就开始码,发现不

平凡的脚步也可以走完伟大的行程。 721

GDSOI2017 中学生数据结构题(Lct练习)

题目大意:给出一棵树。 要求维护:一条路径上的点权和。 修改1:一条路径上的点的点权全部加上一个数。 修改2:shift 假设一个路径上的点是ax,ak1,ak2,…ay 就把ax的点权放到ak1上,把ak1的点权放到ak2上,…… 把ay的点权放到ax上。

Cold_Chair的博客 890

【GDSOI2017】 中学生数据结构题(LCT)

DescriptionSolution虽然这只是Sone0里很小的一部分,但是我认为这是最烦的一部分,对着一个错误的题目调了两天TAT(最后才发现自己的程序的轮换打反了)。 如果想直接用一棵LCT来做有一个最简单的想法,就是把x到y这段提取出来,然后再轮换一下。但是,这个想法明显有问题,因为轮换的时候只是换了一下相对顺序,并没有交换权值的大小,就是说在下一次询问编号的时候,原来的点x权值c,换了之

Facico的博客 1093

中学生数据结构题

题目大意给一棵n个带点权节点(初始为0)的树 有三种操作: 1,对一条路径上的点的点权全部增加一个数 2,求一条路径上的点的点权和 3,对一条路径进行轮换(假如路径为a_1~a_k则a_1–>a_2,a_2–>a_3….a_k–>a_1)容易想到用lct维护,轮换操作可以直接把左端点接到右端点的右儿子处,但这样会改变树的形态,具体实现就是把权值和形态分开来维护,维护树的形态的lct中,每个s

平凡的脚步也可以走完伟大的行程。 951

【jzoj5048】【IQ测试】【数据结构】

题目大意PTY进行IQ测试,测试的项目是判断一个序列是否是另外一个序列删除若干个数字之后得到的,PTY 深知自己的IQ 低于sqrt(-1),所以他请来了智商超高的你来替他解决问题。解题思路此题有线性离线做法,用指针维护。考虑线段树上二分下一个点即可n log n在线。code#include<set> #include<cmath> #include<cstdio> #include<cstrin

inklutcuah’s blog 676

【JZOJ5068】【GDSOI2017第二轮模拟】树

Description有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i]. 现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根树的方案数。Data Constraint20%的数据:n <= 6 60%的数据:n <= 50 100%的数据:n <= 100Solution这道题是一道带标号的无根树计数,我们考虑prufer序列。

dance in th dark的博客 701

震惊:巨凶狠的中学生打架现场(附视频)

china7888的专栏 5169

GDSOI2019游记

前言 由于某些特殊原因节省经费所以GDKOI和GDOI都咕了,jz初中就两个人去 day0 两个小时的车程海星,中途一路爽快战斗 到了宾馆第一感觉海星,就是大堂小了点 中途因为电梯要刷房卡而被卡了几分钟 然而—— 到了房间后,发现面前有两幅窗帘 拉开窗帘后,发现面前有几扇窗户 打开窗户后,发现面前有一面墙 这™是哪个睿智设计师的杰作 ...

某司机的黑车 593

【JZOJ 4496】【GDSOI 2016】第一题 互补约数 (两种解法)

Description 求∑i=1n∑d|igcd(d,id)\sum_{i=1}^n\sum_{d|i}gcd(d,\dfrac id) 对于100%的数据,n≤1011n\leq 10^{11}。Analysis方法一这是一个不需要莫比乌斯反演的方法。 ∑i=1n∑d|igcd(d,id)\sum_{i=1}^n\sum_{d|i}gcd(d,\dfrac id) =∑i∗j≤ngcd(i,

LYD729 980
上一篇: GDOI2017 总结
下一篇: 【GDSOI 2017】【JZOJ 5104】 逃亡
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值