异象石

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

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

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int ver[N*2],head[N],Next[N*2],d[N],tot=0,fa[N][12],edge[N*2],deep[N],t,po[N],cnt=0,pos[N];
int n,m;
set<int>s;
void add(int x,int y,int z)
{
    ver[++tot]=y,Next[tot]=head[x],head[x]=tot,edge[tot]=z;
}
void dfs(int now)
{
    for(int i=head[now];i;i=Next[i])
    {
        int y=ver[i];
        if(deep[y]) continue;
        deep[y]=deep[now]+1; po[y]=++cnt,pos[cnt]=y; ///时间戳
        fa[y][0]=now;
        d[y]=d[now]+edge[i];       ///记录路径长度
        for(int j=1;j<=t;j++)
            fa[y][j]=fa[fa[y][j-1]][j-1];
        dfs(y);
    }
}
int LCA(int x,int y)          ///最近公共祖先
{
    if(deep[x]>deep[y]) swap(x,y);
    for(int i=t;i>=0;i--)
        if(deep[fa[y][i]]>=deep[x]) y=fa[y][i];
    if(x==y) return x;
    for(int i=t;i>=0;i--)
        if(fa[x][i]!=fa[y][i])
    {
        x=fa[x][i];
        y=fa[y][i];
    }
    return fa[x][0];
}
long long Path(int x,int y)
{
    return d[x]+d[y]-2*d[LCA(x,y)];
}
int main()
{
    cin>>n;
    t=log(n)/log(2)+1;
    memset(deep,0,sizeof(int));
    memset(d,0,sizeof(int));
    for(int i=1;i<n;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        add(x,y,z);add(y,x,z);
    }
    deep[1]=1; po[1]=++cnt,pos[1]=cnt;
    dfs(1);
    cin>>m;
    long long sum=0;
    for(int i=1;i<=m;i++)
    {
        int x;
        char ch;
        cin>>ch;
        if(ch=='?') cout<<sum/2<<endl;
        if(ch=='+')
            {
              cin>>x;
              if(s.empty())
              {
                  s.insert(po[x]);
                  continue;
              }
              set<int>::iterator itl=--s.lower_bound(po[x]);
              set<int>::iterator itr=s.lower_bound(po[x]);
              if(itr==s.begin()) itl=--s.end();  ///这两行代码是为什么
              if(itr==s.end())   itr=s.begin();
                  sum+=Path(pos[*itl],x)+Path(x,pos[*itr]);
                  sum-=Path(pos[*itl],pos[*itr]);
              s.insert(po[x]);   ///最后才插入po[x]
            }
        if(ch=='-')
        {
            cin>>x;
            s.erase(s.find(po[x]));
            if(s.empty())continue;
              set<int>::iterator itl=--s.lower_bound(po[x]);
              set<int>::iterator itr=s.lower_bound(po[x]);
              if(itr==s.begin()) itl=--s.end();
              if(itr==s.end())   itr=s.begin();
                  sum-=Path(pos[*itl],x)+Path(x,pos[*itr]);
                  sum+=Path(pos[*itl],pos[*itr]);
        }
    }
    return 0;
}

/*

输入格式
第一行有一个整数 ,表示点的个数;

接下来 行每行三个整数 ,表示点 和 之间有一条长度为 的双向边;

第 行有一个正整数 ;

接下来 行每行是一个事件,事件是以下三种格式之一:

  • x:表示点 上出现了异象石;
  • x:表示点 上的异象石被摧毁;
    ?:表示询问使当前所有异象石所在的点连通所需的边集的总长度最小是多少。

*/

CH#56C 异象石 一道贼可怕的题目,这能想到就想到,不能想到就等着被算法题目(日常)揍吧。 另外这道题有参考别人代码之嫌,实属弟弟行为,下次一定不。 题目链接:良心网站acwing 题意:中文题啊=_= 思路:LCA+set维护,首先你得要理解时间戳的概念,对于出现的异象石你可以发现一个规律叫做按照时间戳排序,异象石的节点连成一个圈,并且累加相邻的节点,最后得到的结果恰好是路径和的两倍,这是本题最为可怕的地方,因为你根本想不到竟然还可以这样累加,我下次该怎么想这种题目?手画样例?还是默默的把这种结论记下来?很难考到这么奇怪的 阅读详情

相关推荐

基于LSTM语义分析的企业风险预测系统

在数字化时代,企业面临着前所未有的挑战和机遇,而风险管理作为确保企业稳定发展的关键一环,其重要性日益凸显。为了及时、准确地监测和分析企业相关的风险,并预测可能带来的风险,本文介绍了一种基于长短期记忆(LSTM)语义分析的企业风险预测系统。该系统利用深度学习技术,通过将收集到的企业数据进行预处理和分析,结合LSTM模型对文本进行深度语义分析,从而实现对潜在风险的预测和评估。系统设计方面,该系统包括数据预处理、LSTM模型构建与训练、风险预测以及可视化展示等模块。

qiufangtaowvnyyidtf的博客 1392

355. 异象石

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

Mystletainn的博客 767

Prometheus常用配置介绍

除了 scrape_configs 外,上部还有 global 和 rule_files 部分, 其中 global 中 是 全 局 参 数 , scrape_interval 指 定 全 局 默 认 的 时 间 间 隔 , evaluation_interval 指定告警规则校验的时间间隔,rule_files 指定了告警规 则文件的位置名称。• annotations(注释):它们被用于存储更长的其他信息,例如警报描述 或者链接,注释值也可以被模板化。• alert:告警的名称。

weixin_42886699的博客 2260

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

电压抬升电路设计

一、实验目的 掌握集成运放电压放大电路设计基本方法。 掌握基本仪器使用方法(电源、信号发生器、示波器)。 二、实验内容及结果 实验内容 基于集成运放设计一传感器信号采集电路。传感器输出信号在±50mV,频率为100Hz以内,模数转换器允许输入电压在0~5V,要求设计传感器与模数转换器之间的信号采集电路,实现传感器信号放大10倍,并适合模数转换器的输入。模数转换器的输入电阻为1KHz,设计电路时,可使用1KHz电阻作为信号采集电路负载,代替模数转换器。 实验具体要求如下: (1)确定电路形式,说明电压转

Safaearth的博客 4万+

道闸不自动落杆故障排查:从传感器原理到控制器调试全解析

在工业自动化和物联网系统中,传感器与控制器构成的闭环控制是保障设备可靠运行的核心。其基本原理是通过传感器采集环境状态,控制器依据预设逻辑做出决策并驱动执行器动作。这一技术价值在于实现了无人值守下的安全、高效自动化,广泛应用于智能交通、安防和智能楼宇等领域。以停车场道闸系统为例,其自动落杆功能高度依赖地感线圈与防砸雷达的协同。地感线圈作为触发单元,负责感知车辆接近;而防砸雷达则作为持续监测的安全单元,通过微波探测防砸区域内是否有障碍物,其信号是控制器执行落杆决策的关键依据。当系统出现车辆通过后闸杆不落的典型故

weixin_29190651的博客 311

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

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

A_Bright_CH的博客 660

数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

VCS+Verdi单步调试

ic疾风传 1万+

loj 10132 异象石

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

banlianbi6499的博客 637

Mac上MySQL出现secure-file-priv为null

在使用MySQL导入导出文件时出现了错误,原因是没有配置secure-file-priv。 我的MySQL版本是8.0.13,使用如下命令查看secure-file-priv。 结果发现secure-file-priv为空,此时需要为它配置一个文件夹。 解决方案: 1)到MySQL的安装目录中去,Mac中是的是 /usr/local/mysql/support-files,该目录下有一...

zhangvalue的博客 5883

微信小程序 - 真机调试请求异常 Provisional headers are shown,微信小程序开发者工具调试没问题就真机测试时出现请求报错(微信小程序请求接口提示Provisional h)

微信小程序开发 Request Headers: Provisional headers are shown,微信开发工具请求正常,真机调试和上线之后出现 Provisional headers are shown,微信小程序开发工具调试没问题,真机调试Provisional headers are shown,在开发工具调试,请求正常没问题,使用真机调试,请求异常,微信小程序真机调试时后台是本地服务器,显示“Provisional headers are shown”问题解决,微信小程序websocket

🏆 前端领域优质创作者 1万+

【NOIP模拟赛】异象石

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

268

一条 POST 创建整棵业务对象树,SAP Gateway Deep Create 的运行机制与 ABAP 实现

SAPUI5 的 OData V2 Model 支持 Deep Create,可以为一个新建的 transient parent context 创建 Navigation Property 下的 subentity,并把这些子实体的数据合并进 Root Entity 对应的 OData 请求 Payload。销售组织是否合法,客户是否允许下单,物料是否存在,销售区域是否匹配,计量单位是否正确,项目类别如何确定,定价是否成功,合作伙伴如何派生,交货工厂如何确定,这些都可能在一次创建过程中被触发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

[LOJ#10132]异象石

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

a5163273的博客 216

VB摄像头监控

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

一本通1554【例 3】异象石

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

weixin_30760895的博客 611

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

1554 异象石

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

CCCCDEV_CCCC的博客 365

异象石(不用引理的乱搞做法)

文章目录题目我的做法基础做法如何在log时间内查询一个点最近的父亲?如何在log的时间内查询一个点的某个儿子的子树内的儿子节点编号实现正解 QAQ 237行的代码 QAQ 打了我一个下午啊啊啊啊。 题目 题目 我的做法 基础做法 机房大佬CLB提示我这道题目是虚树(当然我的做法不知道是不是虚树,反正虚就对了),于是我发现对于以下的图: 在对外显示上,两个蓝点的LCA是可以代替这两个蓝点的,然后,我们的做法出来了,对于两个点,维护他们两个的LCA,如果一个虚点(即不是真的异象石的位置)只有一个点(不管实的虚的

蒟蒻QMQ 224

【Contest Hunter Round #56】异象石(lca)

第一行有一个整数 N,表示点的个数; 接下来 N-1 行每行三个整数 x,y,z,表示点 x 和 y 之间有一条长度为 z 的双向边; 第 N+1 行有一个正整数 M; 接下来 M 行每行是一个事件,事件是以下三种格式之一: + x:表示点 x 上出现了异象石; - x:表示点 x 上的异象石被摧毁; ?:表示询问使当前所有异象石所在的点连通所需的边集的总长度最小是多少。 输出格式 对于每个 ? ...

Coldfresh的博客 439

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

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

anglanjing7414的博客 693

算法竞赛进阶指南.异象石

来计算, 答案就是一半, 因为每条边被计算了两次, 由于石头会添加和删除, 可以使用。首先观察树的性质, 因为在树中任意两个点之间只有一条路径, 因此最终求得就是。, 那么问题就变成了如何计算边权和,

Ayanami_Rei的博客 686

[bzoj1912]异象石(set)

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

weixin_33905756的博客 140

#10132. 「一本通 4.4 例 3」异象石

#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[...

tgyy_cool的博客 619

Luogu P3320 [SDOI2015]寻宝游戏 / 异象石 【LCA/set】

期末考试结束祭! 在期末考试前最后一发的测试中,异象石作为第二道题目出现QAQ。虽然知道是LCA图论,但还是敲不出来QAQ。 花了两天竞赛课的时间搞懂(逃 异象石(stone.pas/c/cpp)题目描述Adera 是 Microsoft 应用商店中的一款解谜游戏。异象石是进入 Adera 中异时空的引导物,在 Adera 的异时空中有一张地图。这张地图上有 N 个点,有 N-1 条双向边把...

weixin_30379973的博客 152

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

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

日居月诸的博客 744
上一篇: LCA 最近公共祖先
下一篇: SQL实验二
MyLXHan
博客等级 码龄7年 7粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值