比赛链接

A

题解

知识点:LCA。

队友写的,俺不会qwq。预处理出关键点序列的在树A B上的前缀LCA和后缀LCA,枚举去掉的关键节点并使用前后缀LCA算出剩余节点的LCA比较权值即可。

时间复杂度 \(O(k \log n)\)

空间复杂度 \(O(n)\)

代码

#include<bits/stdc++.h>

#define N 400010
#define inf 0x7fffffff using namespace std; int n, m, dep[N], fa[N][23], first[N], cnt, ans, w[N];
int ss[N], k, maxk_A[2], mink_A[2], maxx_A[2], minn_A[2] = { inf,inf }, dfsx[N], t;
int maxk_B[2], mink_B[2], maxx_B[2], minn_B[2] = { inf,inf }; struct node {
int v, next;
}edge[N]; void add(int u, int v) {
edge[++cnt] = (node){ v,first[u] };
first[u] = cnt;
} void dfs(int u, int fath) {
dep[u] = dep[fath] + 1, fa[u][0] = fath, dfsx[u] = ++t;
for (int i = 1;i <= (int)log2(dep[u]) + 1;i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];
for (int i = first[u];i != 0;i = edge[i].next) {
if (edge[i].v != fath) dfs(edge[i].v, u);
}
} int LCA(int x, int y) {
if (dep[x] < dep[y]) swap(x, y);
while (dep[x] > dep[y]) x = fa[x][(int)log2(dep[x] - dep[y])];
if (x == y) return x;
for (int i = (int)log2(dep[x]);i >= 0;i--) {
if (fa[x][i] != fa[y][i]) {
x = fa[x][i];
y = fa[y][i];
}
}
return fa[x][0];
} int main() {
scanf("%d%d", &n, &k);
for (int i = 1;i <= k;i++) scanf("%d", &ss[i]);
for (int i = 1;i <= n;i++) scanf("%d", &w[i]);
for (int i = 1, x;i < n;i++) {
scanf("%d", &x);
add(i + 1, x), add(x, i + 1);
}
for (int i = 1;i <= n;i++) scanf("%d", &w[i + n]);
for (int i = 1, x;i < n;i++) {
scanf("%d", &x);
add(i + 1 + n, x + n), add(x + n, i + 1 + n);
}
dfs(1, 0);
t = 0, dfs(1 + n, 0);
for (int i = 1;i <= k;i++) {
if (dfsx[ss[i]] > maxx_A[0]) { maxk_A[1] = maxk_A[0], maxx_A[1] = maxx_A[0]; maxk_A[0] = ss[i], maxx_A[0] = dfsx[ss[i]]; }
else if (dfsx[ss[i]] > maxx_A[1]) maxk_A[1] = ss[i], maxx_A[1] = dfsx[ss[i]];
if (dfsx[ss[i]] < minn_A[0]) { mink_A[1] = mink_A[0], mink_A[1] = minn_A[0]; mink_A[0] = ss[i], minn_A[0] = dfsx[ss[i]]; }
else if (dfsx[ss[i]] < minn_A[1]) mink_A[1] = ss[i], minn_A[1] = dfsx[ss[i]];
}
for (int i = 1;i <= k;i++) {
if (dfsx[ss[i] + n] > maxx_B[0]) { maxk_B[1] = maxk_B[0], maxx_B[1] = maxx_B[0]; maxk_B[0] = ss[i], maxx_B[0] = dfsx[ss[i] + n]; }
else if (dfsx[ss[i] + n] > maxx_B[1]) maxk_B[1] = ss[i], maxx_B[1] = dfsx[ss[i] + n];
if (dfsx[ss[i] + n] < minn_B[0]) { mink_B[1] = mink_B[0], minn_B[1] = minn_B[0]; mink_B[0] = ss[i], minn_B[0] = dfsx[ss[i] + n]; }
else if (dfsx[ss[i] + n] < minn_B[1]) mink_B[1] = ss[i], minn_B[1] = dfsx[ss[i] + n];
}
for (int i = 1;i <= k;i++) {
int x_A, y_A, x_B, y_B;
if (ss[i] != maxk_A[0]) x_A = maxk_A[0];
else x_A = maxk_A[1];
if (ss[i] != mink_A[0]) y_A = mink_A[0];
else y_A = mink_A[1];
if (ss[i] != maxk_B[0]) x_B = maxk_B[0];
else x_B = maxk_B[1];
if (ss[i] != mink_B[0]) y_B = mink_B[0];
else y_B = mink_B[1];
int a = LCA(x_A, y_A), b = LCA(x_B + n, y_B + n);
if (w[a] > w[b]) ans++;
}
printf("%d", ans);
return 0;
}
/*
5 2
3 4
6 6 3 4 6
1 2 2 4
7 4 5 7 7
1 1 3 2
*/

C

题解

知识点:贪心,排序。

通过如下比较即可:

sort(s, s + n, [&](string &a, string &b) {
return a + b < b + a;
});

注意要用引用,否则可能过不去。

时间复杂度 \(O(|S|\log n)\)

空间复杂度 \(O(|S|)\)

代码

#include <bits/stdc++.h>

using namespace std;

string s[2000007];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 0;i < n;i++) cin >> s[i];
sort(s, s + n, [&](string &a, string &b) {
return a + b < b + a;
});
for (int i = 0;i < n;i++) cout << s[i];
cout << '\n';
return 0;
}

蔚来杯2022牛客暑期多校训练营3 AC的更多相关文章

  1. 蔚来杯2022牛客暑期多校训练营5 ABCDFGHK

    比赛链接 A 题解 知识点:图论,dp. 暴力建图,连接所有点的双向通路,除了原点是单向的,并且把路径长度作为权值. 随后,从原点出发(\(f[0] = 0\),其他点负无穷,保证从原点出发),按照权 ...

  2. 蔚来杯2022牛客暑期多校训练营6 ABGJM

    比赛链接 A 题解 知识点:数学,构造. 题目要求构造一个长为 \(m\) 的序列 \(c\) ,\(m\) 自选,使得 \(c\) 的无限循环序列 \(b\) 中任意连续 \(a_i\) 个数中都存 ...

  3. 蔚来杯2022牛客暑期多校训练营7 CFGJ

    比赛链接 C 题解 方法一 知识点:思维. 先统计没有出现的数,每个都可以随便放,所以作为补位用的. 将原数组左移一位作为预定的答案数组,然后开始检查.如果和原数组一样,则用补位数字填充,如果不一样就 ...

  4. "蔚来杯"2022牛客暑期多校训练营9 G Magic Spells【马拉车+哈希】

    四川今天又上热搜了,继南部疫情的未雨绸缪后,龙槽沟是真的倾盆大雨了.我没有兴趣虚伪矫情地对罹难的游人表达同情,因为人与人互不相通徒增谈资:我也没有兴趣居高临下地对擅闯的愚人表达不屑,因为你我皆为乌合之 ...

  5. "蔚来杯"2022牛客暑期多校训练营1 C.Grab the Seat!

    C.Grab the Seat! 题目链接 https://ac.nowcoder.com/acm/contest/33186/C 题目大意 1.二维平面中,(0,1) - (0,m)为屏幕 2.有n ...

  6. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  7. 2021牛客暑期多校训练营3 J 思维

    传送门 J-Counting Triangles_2021牛客暑期多校训练营3 (nowcoder.com) 题目 Goodeat finds an undirected complete graph ...

  8. B-xor_2019牛客暑期多校训练营(第四场)

    题意 给出n个数组(每组数个数不定),m个询问 l, r, x 序号在区间\([l,r]\)的每个数组是否都可以取出任意个数异或出x 题解 判断一个数组能否异或出x,是简单的线性基问题 判断多个线性基 ...

  9. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  10. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

随机推荐

  1. spring cloud 通过feign请求设置请求头

    本文为博主原创,转载请注明出处: spring cloud 服务组件之间通过feign 的方式请求,会携带很少的基础类型的消息头参数,比如Content-Type等,但不会携带自定义或指定的请求头参数 ...

  2. Angular系列教程之依赖注入详解

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  3. Git-远程仓库-remote-pull-push

  4. [转帖]十步解析awr报告

    http://www.zhaibibei.cn/awr/1.1/ 从这期开始讲解awr报告的部分,首先讲解awr整体的部分 后续会针对不同的点进行讲解 1. 数据库细节 这部分可以看到 数据库的版本 ...

  5. [转帖]PCIe信息查询

    https://www.jianshu.com/p/b3a57fcaff8d 查询PCIe设备厂商信息 通过PCIe设备的描述信息进行查询 PCIe设备的描述:Class号.厂商号(vender id ...

  6. [转帖]Tomcat 优雅关闭之路

    本文首发于 vivo互联网技术 微信公众号链接:https://mp.weixin.qq.com/s/ZqkmoAR4JEYr0x0Suoq7QQ作者:马运杰 本文通过阅读Tomcat启动和关闭流程的 ...

  7. mysql8 部分信息总结

    0. 我这边环境需要的配置参数 datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld.logp ...

  8. 说透IO多路复用模型

    作者:京东零售 石朝阳 在说IO多路复用模型之前,我们先来大致了解下Linux文件系统.在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件 ...

  9. 2023年了,做SEO还有必要吗?

    作者:京东科技 吴磊 搜索引擎工作原理 在搜索引擎网站的后台会有一个非常庞大的数据库,里面存储了海量的关键词,而每个关键词又对应着很多网址,这些网址是被称之为"搜索引擎蜘蛛"或&q ...

  10. RabbitMQ集成系统文章02---webForm发布 ABP VNext订阅

    一.webForm项目中发布 1.引用RabbitMQ.Client 2.在你想要发布的地方调用如下的方法 public void PublishRabbitMQ() { var data = new ...