1554 异象石

【题解】CH#56C异象石 LCA+set 题目链接 描述 Adera是Microsoft应用商店中的一款解谜游戏。 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图。这张地图上有N个点,有N-1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的M个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点);... 阅读详情

1554 异象石

题目说的,给定n个点n-1个边,那么肯定是一个树形结构
当然,我是来练习LCA的,因为我感觉练习LCA有点少了
地图上某一个点出现了异象石,地图上某个点的异象石被摧毁,向玩家询问所有异象石所在的联通点的的总长度的长度最小是多少
可以看出来了是一个求LCA,这里不成一个常识,菊花图,表示任意一个点都和根节点有一条连边
我们可以先对这棵树进行深度优先遍历,求出时间戳
仔细考虑,瞎猜找规律就发现,如果我们按照时间戳从小到大的顺序,把出现异象石的节点排成一圈,并且累加相邻两个节点的路径长度,把出现异象石的节点排成一圈之后,并且累加相邻两个节点之间的路径长度,最后得到的结果恰好就是结果的两倍

#include<bits/stdc++.h>
using namespace std;
 
typedef long long LL;
#define lowbit(x) (x)&(-x)
#define iter set<int>::iterator
const int maxn=1e5+10,maxk=1e4+10,MOD=10056;
LL n,m,pos[maxn],dep[maxn],dfn[maxn],f[maxn][25],d[maxn];
LL ans,cnt;
LL nxt[2*maxn],to[2*maxn],he[2*maxn],w[2*maxn],en;
vector<int> node[maxn];
set<int> seq;
//倍增法求LCA
struct edge{
    int to,dis;
    edge(int t,int d):to(t),dis(d){}
};
vector<edge> edges;
struct node{
    int num,front,next;
    node(int nu,int fr,int ne):num(nu),front(fr),next(ne){}
    bool operator < (node& x){
        return num<x.num;
    }
};
inline void add(int x,int y,int dis){
    to[++en]=y,w[en]=dis,nxt[en]=he[x],he[x]=en;
}
void dfs(int u,int father){
    dep[u]=dep[father]+1;
    dfn[u]=++cnt,pos[cnt]=u;
    for (int i=0;i<=19;i++)
        f[u][i+1]=f[f[u][i]][i];
    for (int e=he[u];e;e=nxt[e]){
        int v=to[e];
        if (v==father) continue;
        f[v][0]=u;
        d[v]=d[u]+w[e];
        dfs(v,u);
    }
}
int LCA(int x,int y){
    if (dep[x]<dep[y]) swap(x,y);
    for (int i=20;i>=0;i--) if (dep[f[x][i]]>=dep[y]) x=f[x][i]; //把x调到与y同一层
    if (x==y) return x;
    for (int i=20;i>=0;i--) if (f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i]; //不同才跳
    return f[x][0];
}
inline LL path(int x,int y){ return d[x]+d[y]-2*d[LCA(x,y)];}
iter left(iter x){
    if (x==seq.begin()) return --seq.end();
    return --x;
}
iter right(iter x){
    if (x==--seq.end()) return seq.begin();
    return ++x;
}
int main() {
    scanf("%d",&n);
    for (int i=0;i<n-1;i++){
        int x,y,dis;
        scanf("%d%d%d",&x,&y,&dis);
        add(x,y,dis),add(y,x,dis);
    }
    dep[0]=0,f[1][0]=0,d[1]=0;
    dfs(1,0);
    scanf("%d",&m);
    for (int i=0;i<m;i++){
        char ch;
        scanf(" %c",&ch);
        if (ch=='?') printf("%lld\n",ans/2);
        else if (ch=='+'){
            int num;
            scanf("%d",&num);
            if (seq.empty()) seq.insert(dfn[num]);
            else {
                iter r=seq.lower_bound(dfn[num]);
                if (r==seq.end()) r=seq.begin();
                iter l=left(r);
                ans+=path(pos[*l],num)+path(num,pos[*r])-path(pos[*l],pos[*r]);
                seq.insert(dfn[num]);
            }
        }
        else {
            int num;
            scanf("%d",&num);
            iter it=seq.find(dfn[num]);
            iter l=left(it),r=right(it);
            ans+=path(pos[*l],pos[*r])-path(pos[*l],num)-path(num,pos[*r]);
            seq.erase(dfn[num]);
        }
    }
}
用Plecs搞定半桥LLC谐振变换器仿真:从开环模型搭建到闭环PI调参全流程 本文详细介绍了使用Plecs仿真工具进行半桥LLC谐振变换器从开环模型搭建到闭环PI调参的全流程操作。涵盖仿真环境准备、关键元件参数计算、波形异常排查、闭环控制实现及PI参数整定等核心内容,特别针对仿真中的收敛性问题提供实用解决方案,助力电力电子设计者高效完成LLC变换器仿真验证。 阅读详情

相关推荐

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 306

355. 异象石

Adera是Microsoft应用商店中的一款解谜游戏。 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图。 这张地图上有N个点,有N-1条双向边把它们连通起来。 起初地图上没有任何异象石,在接下来的M个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点); 向玩家询问使...

Mystletainn的博客 767

【TM1650】STM8S TM1650芯片控制程序

以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include &lt;iostm8s103f3.h&gt; #include &lt;intrinsics....

cxw312864660的博客 1万+

异象石

问题描述 在 Adera 的异时空中有一张地图。这张地图上有 个点,有 条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的 个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点); 向玩家询问使所有异象石所在的点连通的边集的总长度最小是多少。 请你作为玩家回答这些问题。下图是一个例子,灰色节点表示出现了异象石,加粗的边表示被选为连通异象石的边集。 #include<bits/stdc

More_Progress的博客 538

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6002

MuJoCo 机械臂关节空间阻抗控制Impedance实现(附代码)

阻抗控制通过调整关节的刚度和阻尼,让机器人在接触时产生顺应性,减少冲击力,其核心目标是在接触外部载荷时能够自适应调整输出力矩,实现力与位置的协同控制。阻抗控制可以很快的到达设定位置,在此基础上,使用mujoco交互中的施加外力操作,可以看到当外力松开后,机械臂也可以很快的回弹回设定位置。其中self.Kp和self.Kd为固定刚度和阻尼系数,通过修改刚度和阻尼参数,可以变得更柔顺来应对各种场景。注释掉该行后,直接simulate仿真可以看到机械臂控制位置震荡等情况,接下来引入关节空间阻抗控制的代码。

darcsdn 1274

CH#56C 异象石(LCA)(DFS序)

题目 Adera是Microsoft应用商店中的一款解谜游戏。 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图。这张地图上有N个点,有N-1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的M个时刻中,每个时刻会发生以下三种类型的事件之一: 1. 地图的某个点上出现了异象石(已经出现的不会再次出现); 2. 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点)...

A_Bright_CH的博客 660

电压跟随器在ADC采样电路中的作用分析

电压跟随器在ADC采集系统中扮演关键角色,它能解决分压电路因ADC输入阻抗导致的电压误差问题。通过运放构成的电压跟随器可隔离信号源与负载,保证采样精度,尤其适用于高阻抗传感器或高速采样场景。工程应用中需注意运放带宽、轨对轨输出能力及抗干扰设计。合理使用电压跟随器能显著提升信号完整性,在复杂电子系统中成为不可或缺的"信号桥梁。

硬核科技 655

loj 10132 异象石

题目 传送门:loj10132 在 Adera 的异时空中有一张地图。这张地图上有 N个点,有N-1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的 M个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点); 向玩家询问使所有异象石所在的点...

banlianbi6499的博客 637

Codex 接入国产大模型指南:客户端与 CLI 双端实战

CC Switch是目前最流行的 Codex / Claude Code 模型切换工具,内置了协议转换功能,支持几乎所有主流国产模型。核心原理Codex → 本地 8317 端口(CC Switch)→ 协议转换 → 国产模型 API整个过程对 Codex 完全透明,Codex 以为自己在跟标准的 Responses API 对话。用户类型推荐方案理由新手 / 不想折腾配置简单,免费额度够用追求稳定体验通义千问(原生接入)官方兼容,功能最完整企业用户自建 AI 网关可控性强,支持多用户管理预算有限。

篮球界最会写bug的人;程序猿中打球最菜的人。 576

新能源汽车电机交流电流测量系统精度全链路分析

通过全链路误差建模与瓶颈分析,结合硬件选型优化与软件算法补偿,可将系统精度从4.2%提升至≤1% FS。本文所述方法论已应用于某800V电驱平台开发,实测电流控制精度达±0.8%,为高性能电机控制奠定基础。为例,深入剖析从互感器采集到CAN报文解析的全链路信号处理流程,揭示各环节误差来源及对最终精度的影响,为研发测试提供理论支撑。:±0.1%(电阻温漂与运放开环增益限制):运放增益带宽积(GBW)不足导致高频衰减。:±0.02%/℃(铁氧体材料温敏特性):±0.5%读数(磁芯饱和效应)

优快云-新能源汽车研发测试专业博主 1493

一本通1554【例 3】异象石

1554:【例 3】异象石 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 原题来自:Contest Hunter Round #56 在 Adera 的异时空中有一张地图。这张地图上有N个点,有N−1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的M个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的...

weixin_30760895的博客 611

Python爬虫实战:汽车之家车型参数与口碑数据抓取分析

在当今信息爆炸的时代,购车决策已从传统的4S店咨询转变为数据驱动的智能化过程。汽车之家作为国内领先的汽车信息平台,汇聚了海量车型参数、车主口碑和专业评测数据。本文将详细介绍如何使用Python最新爬虫技术构建一个高效、稳定的汽车数据采集系统,通过多维度数据分析辅助用户做出更明智的购车决策。本项目将采用异步爬虫、智能反爬绕过、数据清洗与分析等现代化技术栈,完整实现从数据采集到可视化分析的全流程。本文详细介绍了如何使用Python最新技术构建一个功能完整的汽车之家数据爬虫系统。

2201_76125261的博客 1488

异象石(信息学奥赛一本通 1554)

【题目描述】 原题来自:Contest Hunter Round #56 在 Adera 的异时空中有一张地图。这张地图上有NN个点,有N−1N−1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的MM个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点)...

anglanjing7414的博客 693

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

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

信奥一本通1554:【例 3】异象石

思路:这里求树上连接多个点的最短路径运用了很巧妙的做法,就是先根据各个异象石结点在树上的时间戳排序(dfs遍历顺序),然后每相邻的两个结点(包括首尾)之间求最短路,最后把这些路求和就是答案的两倍,由于这个过程相当于围绕着要求的路径走了一圈,每条路都走过并且是走两遍!然后注意开long long,并且注意不能每次直接从头遍历到尾去找那个插入或者删除的地方,这样会超时,应该用find。...

PONY_10001的博客 767

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

1554:【例 3】异象石(lca+离谱结论+set操作

#include <bits/stdc++.h> using namespace std; const int N=2e6+10; struct edge{ int to,nxt,val; }d[N]; int head[N],cnt=1; void add(int u,int v,int k=1){d[++cnt]=(edge){v,head[u],k},head[u]=cnt; } int n,m,son[N],siz[N],deep[N],fa[N][20],an[N]; int top

我们仍未知道那天所看见的花的名字。 363

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

异象石 LCA+Splay+Dfs序 Maverick_Frank

Description Adera是Microsoft应用商店中的一款解谜游戏。 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图。这张地图上有N个点,有N-1条双向边把它们连通起来。起初地图上没有任何异象石,在接下来的M个时刻中,每个时刻会发生以下三种类型的事件之一: 1.地图的某个点上出现了异象石(已经出现的不会再次出现); 2.地图某个点上的异象石被摧毁(

Maverick_Frank的博客 884

《信息学奥赛一本通 提高篇》 第四部分 数据结构 第4章 倍增求LCA

例题1 点的距离 信息学奥赛一本通(C++版)在线评测系统 例题2 暗的连锁(Poj3417) 信息学奥赛一本通(C++版)在线评测系统 LOj10131 暗的连锁_juruo_xlh-优快云博客 暗之连锁——解题报告_风中的微尘的博客-优快云博客 LOJ 暗的连锁 (POJ3417)【LCA + 树上差分 + 计数】 - Frank-King - 博客园 例题3 异象石 信息学奥赛一本通(C++版)在线评测系统 LOJ #10132. 「一本通 4.4 例 3」异象石 解

青少年趣味编程 608

1556:Dis(lca+前缀和

#include <bits/stdc++.h> using namespace std; const int N=1e6+10; struct edge{ int to,nxt,val; }d[N]; int head[N],cnt=1; void add(int u,int v,int k){ d[++cnt]=(edge){v,head[u],k},head[u]=cnt; } int n,m,son[N],siz[N],deep[N],fa[N][20],an[N]; int top[

我们仍未知道那天所看见的花的名字。 672

LibreOJ 10132. 异象石

链接 https://ac.nowcoder.com/acm/problem/51256 题意 树形图上有三种操作: 操作 1:某个点被标记 操作 2:某个点被取消标记 操作 3:求所有被标记的点连通的边集的最小值 总共有 mmm 个操作 思路 将所有的点按照dfs序排序,易发现相邻两点的路径长度之和(首尾相连)恰好是答案的两倍 用 setsetset 按照dfs序大小维护被标记的点 标记点 xxx :ans+=path[l][x]+path[x][r]−path[l][r]ans+=path[l][x]+

c4Lnn 的 优快云 博客 292

LOJ #10132. 「一本通 4.4 例 3」异象石 解题报告

文章目录题目链接解题思路详细代码 题目链接 LOJ #10132. 「一本通 4.4 例 3」异象石 解题思路 神仙题。(真难写) 首先这组成的是一棵树。我们假定1为根。 然后,我们考虑使用dfs序来存下这颗树。这样有什么好处呢?我们把树上问题转换为了链上问题。(注意,这个dfs序要是个环) 我们动手画画图,我们就会发现,我们可以根据这个dfs序来计算每次加入、减少的贡献值。 使用平衡树来维护异象...

日居月诸的博客 744

对acwing355异象石引理的证明

首先我们抽象一下这道题的模型,然后把引理记住 模型:对于一棵树上选定的一些点,把他们连通起来的最小边数 我们先考虑一种朴素做法,对于任何一种方案,任取其中两个点,那么这个方案一定包含这两个点之间的路径 就是说,我们依次添加每个点,对于每一个新添加进来的点,让这个点与其已经添加的点求路径,然后把路径上每条边染色一次,最后有多少条边被染色就证明这些边都是必须要要的,另一方面,把这些边选上一定连通,所...

dingxingdi的博客 123

LCA专题 异象石Acwing355 次小生成树Acwing356 疫情控制 Acwing357

异象石Acwing355 Adera 是 Microsoft 应用商店中的一款解谜游戏。 异象石是进入 Adera 中异时空的引导物,在 Adera 的异时空中有一张地图。 这张地图上有 N 个点,有 N−1 条双向边把它们连通起来。 起初地图上没有任何异象石,在接下来的 M 个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个点上出现了异象石(已经出现的不会再次出现); 地图某个点上的异象石被摧毁(不会摧毁没有异象石的点); 向玩家询问使所有异象石所在的点连通的边集的总长度最小

qq_53680405的博客 374

10款降AI率工具测评:学术论文与内容创作必备指南

AI文本检测技术已成为学术和内容创作领域的重要指标,其核心原理是通过机器学习模型分析文本特征来判定内容来源。在论文写作和期刊发表场景中,降低AI生成概率对通过审核至关重要。本次测评从语义保持、语法流畅、学科适配等维度,对比分析了星辰引擎AIGC、Quillbot等10款主流工具的实战表现。测试发现,技术类文本推荐使用星辰引擎AIGC的学术模式,而秘塔写作猫则擅长处理人文类内容。合理运用这些工具配合人工润色,能有效平衡AI率与内容质量,特别适合计算机科学论文和商业案例分析等场景的需求。

weixin_30256901的博客 534

ContestHunter#56-C 异象石

Problem一棵树(1e5节点),初始时均没有异象石。有m个时刻,每个时刻可能会发生三件事:①某个点出现异象石 ②某个点异象石消失 ③最短用多大长度的路径,把异象石串在一起。Solution给每个点打时间戳dfn,然后把有异象石的节点的dfn,排成一个序列,平衡树维护,以dfn为排序关键字,主要存节点编号(注意收尾要考虑为相连的),则每相邻两个点的距离加在一起,就是答案的二倍。于是我们开全局变量...

呆头呆脑没有烦恼 793
上一篇: 4503 企鹅QQ
下一篇: 4391 无线传输
CCCCDEV_CCCC
博客等级 码龄6年 18粉丝 381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值