[BZOJ3510][启发式合并][LCT维护子树信息]首都

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑) 阅读详情

题意略…(今天比较懒)

由于只有建造公路没有破环公路,所以可以用启发式合并保持操作数为log,暴力拆开小的联通块,用LCT插到大的联通块内,然后用LCT维护子树信息,具体看这里

#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 300010

using namespace std;

int n,m,rt[N],g[N],Ans,x,y,tp;
char op;
int fa[N],ch[N][2],sz[N],isz[N],rev[N],sta[N],tot[N],G[N],cnt;
struct edge{
  int t,nx;
}E[N<<3];

inline int isr(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
inline int isl(int x){return ch[fa[x]][1]==x;}

int fifa(int x){return rt[x]==x?x:(rt[x]=fifa(rt[x]));}

inline void upd(int x){
  if(!x) return;
  sz[x]=1+isz[x];
  if(ch[x][0]) sz[x]+=sz[ch[x][0]];
  if(ch[x][1]) sz[x]+=sz[ch[x][1]];
}

inline void pushdown(int x){
  if(!(x&&rev[x])) return;
  swap(ch[x][0],ch[x][1]);
  if(ch[x][0]) rev[ch[x][0]]^=1;
  if(ch[x][1]) rev[ch[x][1]]^=1;
  rev[x]=0;
}

inline void rot(int x){
  int y=fa[x],z=fa[y],lor=isl(x);
  if(!isr(y)) ch[z][ch[z][1]==y]=x; fa[x]=z;
  if(ch[y][lor]=ch[x][lor^1]) fa[ch[y][lor]]=y;
  fa[ch[x][lor^1]=y]=x; upd(y); upd(x);
}

inline void splay(int x){
  sta[tp=1]=x;
  for(int i=x;!isr(i);i=fa[i]) sta[++tp]=fa[i];
  for(;tp;--tp) pushdown(sta[tp]);
  for(;!isr(x);rot(x)) if(!isr(fa[x])) rot(isl(x)^isl(fa[x])?x:fa[x]);
}

inline void access(int x){
  int t=0;
  for(;x;x=fa[x]){
    splay(x);
    isz[x]+=sz[ch[x][1]]-sz[t];
    ch[x][1]=t;
    t=x;
    upd(x);
  }
}

inline void reverse(int x){access(x); splay(x); rev[x]^=1;}
inline void link(int x,int y){
  reverse(x);
  reverse(y);
  fa[x]=y;
  isz[y]+=sz[x];
  upd(y);
  reverse(g[fifa(y)]);
  access(x);
  splay(g[fifa(y)]);
  int S=sz[g[fifa(y)]],t=ch[g[fifa(y)]][1];pushdown(t);
  while(ch[t][0]) pushdown(t=ch[t][0]);
  access(t);
  if((isz[t]+1)*2>S||((isz[t]+1)*2==S&&t<g[fifa(y)])){
    Ans^=g[fifa(y)]^t;
    g[fifa(y)]=t;
  }
}

inline void reaD(int &x){
  char Ch=getchar();x=0;
  for(;Ch>'9'||Ch<'0';Ch=getchar());
  for(;Ch>='0'&&Ch<='9';x=x*10+Ch-'0',Ch=getchar());
}

inline void InserT(int x,int y){
  E[++cnt].t=y;E[cnt].nx=G[x];G[x]=cnt;
  E[++cnt].t=x;E[cnt].nx=G[y];G[y]=cnt;
}

void dfs(int x,int f){
  ch[x][0]=ch[x][1]=fa[x]=isz[x]=rev[x]=0;
  sz[x]=1;
  link(x,f);
  for(int i=G[x];i;i=E[i].nx)
    if(E[i].t!=f) dfs(E[i].t,x);
}

inline void merge(int x,int y){
  tot[fifa(y)]+=tot[fifa(x)];
  Ans^=g[fifa(x)];
  rt[fifa(x)]=fifa(y);
  dfs(x,y); InserT(x,y);
}

int main(){
  reaD(n); reaD(m);
  for(int i=1;i<=n;i++) rt[i]=i,g[i]=i,Ans^=i,tot[i]=1;
  for(int i=1;i<=m;i++){
    while((op=getchar())!='A'&&op!='Q'&&op!='X');
    if(op=='X') printf("%d\n",Ans);
    else if(op=='Q') reaD(x),printf("%d\n",g[fifa(x)]);
    else{
      reaD(x); reaD(y);
      if(tot[fifa(x)]>tot[fifa(y)]) swap(x,y);
      merge(x,y);
    }
  }
}
在Windows10上安装WSL2 WSL2是微软提供的Windows子系统,允许在Windows 10和11上运行Linux环境,提供更好的性能和兼容性。安装WSL2需要启用WSL功能、更新系统、安装WSL2内核,并设置为默认版本。之后,可以通过Microsoft Store安装Linux发行版,并使用WSL命令启动和管理它们。 阅读详情

相关推荐

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

LCT维护子树信息(子树信息LCT) LCT维护边权(边权LCT) 知识点讲解

扯淡(前言) 众所周知LCT可以支持关于点权的链修改,换根,LINK,CUT和查询链信息操作,但是总有那么些神犇(毒瘤)出题人会让你在支持链修改,换根,LINK和CUT操作的情况下去支持子树查询,或者维护关于边权的链修改,换根,LINK,CUT和链查询。网上似乎讲解这两种LCT写法的blog比较少或者不怎么能搜到?总之我来写一发 (LCT基础知识回顾) 为了方便说话先说一下下面可能出现的

neither_nor 1万+

Unreal5(虚幻五) 实现UI与C++代码逻辑的交互 保姆级教程

本人有Unity基础,刚学UE几天,把这一套处理流程记录一下备用。

qq_42915442的博客 9815

LCT维护子树信息

有些题目,在要求支持link-cut之外,还会在线询问某个子树的信息。LCT可以通过维护虚边信息完成这个操作。 对于LCT上每个节点,维护两个两sz和si,后者维护该点所有虚儿子的信息,前者维护该点的所有信息和。 那么显然有:$si[x]=\sum sz[pson]$,$sz[x]=sz[lson]+sz[rson]+si[x]+v[x]$。 其中pson是虚儿子,lson,rson是LCT...

weixin_30586085的博客 452

有源滤波电路设计

目录一、低通滤波器1、同相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(压控电压源;Sallen-Key)2、反相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(无限增益多路反馈)二、高通滤波器1、同相输入高通滤波器(1)一阶高通滤波电路(2)二阶高通滤波电路(压控电压源;Sallen-Key)2、反相输入高通滤波电路(1)二阶高通滤波电路(无限增益多路反馈) 一、低通滤波器 1、同相输入低通滤波器 (1)一阶低通滤波电路 即在一阶无源低通滤波器的基础上,加了一个集成运放。 它的

qq_41873236的博客 3万+

Node-Red系列教程——NodeRed通过OPC UA读取数据并写入mysql

NodeRed通opcua读取西门子数据并存入mysql

鲸鱼姐的专栏 1万+

洛谷P4219 lct维护子树信息

LCT

stdforces的博客 280

不用标注数据!用SAM 3零成本搞定遥感图像分割:SegEarth-OV3保姆级上手教程

本文介绍了如何利用SAM 3和SegEarth-OV3实现零标注遥感图像分割,提供从环境配置到结果优化的完整教程。通过开放词汇语义分割技术,用户无需标注数据即可快速获得专业级分割结果,适用于光伏板统计、灾害评估等场景。

weixin_30415113的博客 586

LCT 支持删边、加边并维护森林中每棵子树的大小

支持删边、加边并维护森林中每棵子树的大小 ​ 本文包含大量的指代不明,纯文字乱说,没有实现代码等一切极好的要素。 ​ 之前我们学过splay中有个size信息,且size[p]=size[lc]+size[rc]size[p]=size[lc]+size[rc]size[p]=size[lc]+size[rc],但这个所维护并不是子树的大小,而是splay树的大小,换言之就是splay所表示的链的长度。 ​ 而现在我们要维护树的大小,但是辅助树有一个认父不认子的特性,所以只在一颗splay树中进行信息传递是

weixin_43883746的博客 451

Multi-Agent

Multi-Agent System(MAS,多代理系统)是分布式人工智能(DAI)领域皇冠上的明珠,其核心思想是通过多个自主、交互、目标导向的智能体(Agent)的协同与竞争,解决单智能体无法或难以高效处理的复杂问题——包括大规模资源调度、多模态数据理解与决策、复杂软件架构的自治运维、甚至未来城市级的交通与能源管理。本文将以结构化分析推理和第一性原理思考。

AI智能探索者的博客 407

训练YOLOv11 | Pytorch和Pycharm的安装教程适用W11系统(附详细的系统变量添加过程)

根据你之前下载的版本选择对应的选项即可,然后复制底下的绿色代码到Anaconda的命令行输入即可(这里要在你安装的python环境里进行安装,例如我的环境名字是PyTorch,那么就是activate PyTorch里进行安装)然后同之前一样会加载一会,然后会询问我们是否下载配件,我们输入Y等待即可(下载过程中我们要确保网络通常如果有波动可能会下载失败)。类似于我的电脑是Windows11选择上面红框内的选项即可点击后即下载,(注意这里下载的是zip文件)下载完成后复制下面几个文件。

Snu77的博客 1万+

【LCT维护子树信息】uoj207 共价大爷游长沙

这道题思路方面就不多讲了,主要是通过这题学一下lct维护子树信息。 lct某节点u的子树信息由其重链的一棵splay上信息和若干轻儿子子树信息合并而成。 splay是有子树结构的,可以在rotate,access的时候由儿子update到父亲,而轻儿子的信息update不上来,需要另外记一下。 记sum[x]为我们要求的子树信息,xu[x]为x的轻儿子的子树信息。 (即,xu[x]由轻儿子的sum...

weixin_30247307的博客 153

Python爬虫实战:全面解析裁判文书网法律文书抓取与分析

本文详细介绍了如何使用Python爬虫技术,分别通过Requests+BeautifulSoup、Selenium和Scrapy等方式,爬取裁判文书网的法律文书信息,并进行了验证码处理、数据存储和可视化分析。网页结构分析与数据提取;爬虫框架的使用;验证码处理策略;数据分析与可视化。爬取更多法律文书网站的数据;爬取文书的全文内容;构建法律文书搜索引擎;使用自然语言处理技术对法律文书进行深入分析。

2201_76125261的博客 1331

bzoj3510首都 LCT维护子树信息+启发式合并

3510: 首都 Time Limit:10 SecMemory Limit:256 MB Submit:213Solved:82 [Submit][Status][Discuss] Description 在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。 X星球上战乱频发,如果A国打败了B国,那...

maxtir的博客 500

VB摄像头监控

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BZOJ 3510: 首都 LCT维护子树信息 启发式合并

3510: 首都 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 236  Solved: 89 [Submit][Status][Discuss] Description 在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。  X星球上战乱频发,如果A国打败了B国

BlackJack 628

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【bzoj3510】首都 LCT维护子树信息(+启发式合并)

题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失,而B国的国土也将归A国管辖。A国国王为了加强统治,会在A国和B国之间修建一条公路,即选择原A国的某个城市和B国某个城市,修建一条连接这两座城市的公路。同样为了便于统治自己的国家,国家的首...

weixin_30650039的博客 132

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

bzoj 3510 首都

Description 在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失,而B国的国土也将归A国管辖。A国国王为了加强统治,会在A国和B国之间修建一条公路,即选择原A国的某个城市和B国某个城市,修建一条连接这两座城市的公路。同样为了便于统治自己的国家,...

weixin_30475039的博客 101

bzoj3510 首都(lct维护虚边信息+树的重心性质)

首先关于树的重心的一些性质: 1.树的重心就是一个点,其所有的子树中最大的子树节点数最少。 2.根据树的重心,每棵子树的大小不超过n的一半。 3.树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。 4.把两棵树通过某两点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上。 5.一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置...

Icefox的博客 487

BZOJ3510 首都

到所有点距离和最小的点就是重心 因为只有link操作,我们可以考虑启发式合并,这样最多会有n log n次“插入一个叶子节点”操作 一棵树插入一个叶子节点之后,重心要么不变,要么向叶子的方向移动一条边,移动的条件是叶子所在的子树大小*2大于这棵树的大小(或者相等取编号小的) 用LCT维护子树大小即可 #include #include #include #include #include

neither_nor 1202

[bzoj3510]首都

题目大意一开始有n个结点,没有边。 有三种操作:将两个结点间连一条边,并且保证两个结点属不同联通块。询问一个联通块中所有点到其距离和最小的点。询问所有联通块中所有点到其距离和最小的点的异或和。启发式合并显然是一片森林,要求维护重心。 可以用启发式合并的思路,把小的合到大的里面,然后调整原本大的树里的重心,显然这个重心只会朝着小树方向调整,而且最多移动小树大小步。 然后需要用LCT来维护森林,并

不来也不去的一只失忆蝴蝶 1451

BZOJ 3510 - 首都 「 $LCT$ 动态维护树的重心」

这题 FlashHu 的优化思路值得借鉴 前置引理 树中所有点到某个点的距离和中,到重心的距离和是最小的。 把两棵树通过某一点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上。 一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。 一棵树最多有两个重心,且相邻;同时,拥有奇数个节点的树只有一个重心 其实是树的重心本身...

302

BZOJ.3510.首都(LCT 启发式合并 树的重心)

题目链接 BZOJ 洛谷 详见这. 求所有点到某个点距离和最短,即求树的重心。考虑如何动态维护。 两棵子树合并后的重心一定在两棵树的重心之间那条链上,所以在合并的时候用启发式合并,每合并一个点检查sz[]大的那棵子树的重心(记为root)最大子树的sz[]*2是否>n; 若>n,则向fa移动一次(先把合并点Splay到根)。重心还一定是在sz[]大的那棵子树中,且移动次数不会超过sz[...

weixin_30618985的博客 128

BZOJ3510: 首都

额,这个在BZOJ上式权限题,本蒟蒻表示是个穷银,买不起权限号,这里贴上洛谷的题面: 洛谷P4299 首都 还是洛谷吼! 题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。 X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失,而B国的国土也将归A国管辖。A国国王为了加强统治,会在A国和B国之间...

weixin_30892763的博客 95

洛谷P4299 首都(BZOJ3510)(LCT,树的重心,二分查找)

Update:原来的洛谷U21715已成坑qwq 已经被某位管理员巨佬放进公共题库啦!又可以多一个AC记录啦! 洛谷题目传送门 其实也可以到这里交啦 思路分析 动态维护树的重心 题目中说到国家的首都会选在某个使得其他城市到它距离之和最小的城市,那不就是树的重心了嘛。树的重心性质真的很好,看看wuhulala巨佬的这篇博客。 网上大多数解法都是启发式合并。利用了以重心为根的子树大小不超过原...

a83229442的博客 188

Bzoj3510:首都

Sol LCTLCTLCT动态维护树重心 方法一 因为只有加边,所以可以暴力启发式合并,维护重心 维护子树信息,子树大小不超过一半 复杂度两只logloglog 方法二 扣出两个重心的链,链上二分找 每次SplaySplaySplay重心,应该是一只logloglog的吧。。。 # include &lt;bits/stdc++.h&gt; # define RG registe...

Cyhlnj 345
上一篇: [BZOJ2806][Ctsc2012][后缀自动机][队列优化][DP]Cheat
下一篇: [BZOJ4530][Bjoi2014][LCT维护子树信息]大融合
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值