[CSP-S2019] 括号树

news/2024/10/7 21:16:49/文章来源:https://www.cnblogs.com/YzaCsp/p/18450622

算法

特殊性质

显然链的情况就是括号匹配

因此显然有代码

代码

#include <bits/stdc++.h>
#define int long long
const int MAXN = 5e5 + 20;int n;
std::string Braket;
int fa[MAXN];bool Check_Special_Quality()
{for (int i = 2; i <= n; i++){if (fa[i] != i - 1){return false;}}return true;
}std::stack<int> Pre;
int k[MAXN];
int Sum[MAXN];int calc()
{int ans = 0;for (int i = 1; i <= n; i++){// printf("%d ", k[i]);ans = ans ^ (i * Sum[i]);}return ans;
}void Solve_For_Special_Quality()
{for (int i = 1; i <= n; i++){if (Braket[i] == '('){Pre.push(i);}else if (Braket[i] == ')'){if (Pre.empty()){}else{int Now = Pre.top();Pre.pop();k[i] = k[Now - 1] + 1;}}Sum[i] = Sum[i - 1] + k[i];}printf("%lld", calc());
}signed main()
{scanf("%lld", &n);std::cin >> Braket;Braket = ' ' + Braket;for (int i = 2; i <= n; i++){scanf("%lld", &fa[i]);}if (Check_Special_Quality()){Solve_For_Special_Quality();return 0;}return 0;
}

注意不能用单数组, 因为不能计算反括号对应正括号

正解

显然有树状的递推性质
那么有

\[lst_i = lst_{t - 1} + 1 \rightarrow lst_x = lst_{\text{fa of x}} + 1 \]

代码

#include<bits/stdc++.h>
#define orz 0
#define inf 0x3f3f3f3f
#define ll long long
#define maxn 500005;using namespace std;int n;
char c[maxn];
int head[maxn], nxt[maxn], to[maxn], cnt, fa[maxn];
ll lst[maxn], sum[maxn], ans;
int s[maxn], top;void add_edge(int u, int v)
{nxt[++ cnt] = head[u];head[u] = cnt;to[cnt] = v;
}void dfs(int x)
{int tmp = 0;if(c[x] == ')'){if(top){tmp = s[top];lst[x] = lst[fa[tmp]] + 1;-- top; }}else if(c[x] == '(') s[++ top] = x; sum[x] = sum[fa[x]] + lst[x]; //如上所述 for(int i = head[x]; i; i = nxt[i])dfs(to[i]); //递归 //回溯复原操作if(tmp != 0) s[++ top] = tmp; //不为 0 代表有信息被弹出 else if(top) -- top; //为 0 代表没有弹出,如果栈不为空说明一定压入了一个信息,需要弹出这个信息复原 
}int main()
{scanf("%d", &n);scanf("%s", c + 1);for(int i = 2; i <= n; i ++){int f;scanf("%d", &f);add_edge(f, i);fa[i] = f;}dfs(1);for(int i = 1; i <= n; i ++)ans ^= sum[i] * (ll)i;printf("%lld", ans);return orz;
}

ctj 是这样的

总结

特殊套路 :
dfs 时保持状态稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA如何快速定位到当前打开文件所在的目录

前言 我们在使用IDEA开发时,经常需要知道当前打开的文件是在哪个目录,这个可以在上方看到具体的目录。 但是,当我们需要知道这个目录下有哪些文件或者想要复制当前文件的时候,就需要快速定位当前文件的目录了。 那么,我们应该如何操作呢? 如何操作定位当前打开文件目录 首…

Vulnhub 靶机 THE PLANETS: EARTH

0x01信息收集 1.1、nmap扫描 IP段扫描,确定靶机地址 平扫描 nmap 192.168.1.0/24扫描结果(部分) Nmap scan report for earth.local (192.168.1.129) Host is up (0.0015s latency). Not shown: 983 filtered tcp ports (no-response), 14 filtered tcp ports (admin-prohib…

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云监控告警平台(附配置告警至QQ、钉钉)

目录一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa 账号 m…

2024.10.7 鲜花

【UNR #3】百鸽笼【UNR #3】百鸽笼花の塔 君が持ってきた漫画 くれた知らない名前のお花 今日はまだ来ないかな? 初めての感情知ってしまった 窓に飾った絵画をなぞってひとりで宇宙を旅して それだけでいいはずだったのに 君の手を握ってしまったら 孤独を知らないこの街には…

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云平台系统(附配置告警至QQ、钉钉)

目录一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa 账号 m…

软件工程第二次结对作业

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业目标 基于第一次结对作业项目程序的实现学号 102201127合作伙伴 102201129项目分工: 102201129周鑫: 前端开发: 设计和实现用户界面。 确保界面响…

20241007

sequence 我们会发现,我们每次删的一定是长度最短的那个,所以我们可以最开始按照长的排一下序,然后用线段树维护每一个区间中还有几个数,每次加上答案后在两个端点打上标记即可 #include <bits/stdc++.h> #define _1 (__int128)1using namespace std; using ll = long lo…

软件工程week2课程作业|“物品复活“软件开发

“物品复活”软件开发 作业要求 大学生经常有些物品觉得扔掉可惜,不处理又觉得浪费自己的地方。请你编写一个物品“复活”软件 该程序允许添加物品的信息(物品名称,物品描述,联系人信息),删除物品的信息,显示物品列表,也允许查找物品的信息 你实现的程序可以采用命令行…

[42] (多校联训) A层冲刺NOIP2024模拟赛03

今天的乐子今天的乐子2 昨天晚上做梦 梦见自己被关进戒网瘾学校 里面的老师全和疯子一样 然后我和这帮疯子老师比疯 疯子老师发现他们没我疯 所以就把我放了今天的乐子3 lhx 罗曼蒂克的辟谷A.五彩斑斓 赛时的想法 \(n^4\) 的做法,设 \(f_{i,j,k,l}\) 表示以 \((i,j)\) 为左上角…

Metasploit渗透测试框架学习(一)基本使用教程

1.Metasploit框架结构 1.1总览基础库文件Rex为最底层,实现网络套接字、网络应用协议、客户端服务端交互、数据库支持等 framework-core实现与上层模块交互的接口 framework-base对framework-core的扩展封装,用于提供各种接口供用户调用基于framework-base实现的六大模块Explo…

统计学(十三)——相关分析

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 相关分析是用于研究多个变量之间相互关系的统计方法,最早由英国统计学家卡尔皮尔逊(Karl Pearson)于1896年提出。皮尔逊通过对变量间线性关系的深入研究,…

前端模块化进化史:从全局 function 到 ES Modules

目前,前端开发已经离不开由 CommonJS、ES Modules 和 Webpack 构建的模块化开发环境。无论是 JavaScript、CSS、图片还是其他资源,都可以作为一个模块来处理。那么,模块化究竟是如何发展到今天的呢? 全局函数模式 最初的前端模块化尝试是通过 全局函数来实现的。例如,在一…