20241007

news/2024/10/7 21:06:30

sequence

我们会发现,我们每次删的一定是长度最短的那个,所以我们可以最开始按照长的排一下序,然后用线段树维护每一个区间中还有几个数,每次加上答案后在两个端点打上标记即可

#include <bits/stdc++.h>
#define _1 (__int128)1using namespace std;
using ll = long long;void FileIO (const string s) {freopen(string(s + ".in").c_str(), "r", stdin);freopen(string(s + ".out").c_str(), "w", stdout);
}const int N = 2e5 + 10;inline int lowbit (int x) {return x & -x;
}struct Num {int l, r;
} a[N];int n, tr[N];
ll ans;void modify (int x, int lv) {while (x) tr[x] += lv, x -= lowbit(x);
}int Query (int x) {int ret = 0;while (x <= 2 * n) ret += tr[x], x += lowbit(x);return ret;
}signed main () {ios::sync_with_stdio(0), cin.tie(0);FileIO("sequence");cin >> n;for (int i = 1, x; i <= 2 * n; i++)cin >> x, a[x] = (!a[x].l ? Num{i, 0} : Num{a[x].l, i});sort(a + 1, a + n + 1, [](const Num &i, const Num &j){return i.l < j.l;});for (int i = 1; i <= n; i++)ans += a[i].r - a[i].l - Query(a[i].l) - Query(a[i].r), modify(a[i].r, 1);cout << ans;return 0;
}

slime

\(dp_{u, 0/1}\) 表示没有删除史莱姆操作时能得到的体积,删除一个史莱姆能减少的最大体积 。

那么我们可以显然得到两个转移

\[dp_{u, 0} = dp_{u, 0} + \sum_{v \in son_u} \max(0, dp_{v, 0} - w)\\ dp_{u, 1} = \max(dp_{u, 1}, \max_{v \in son_u}(\max(0, dp_{v, 0}) - \max(0, dp_{v,0} - dp_{v, 1} - w))) \]

那么我们可以再设 \(ans_{u, 0/1}\) 表示将 \(u\) 作为根时不用删除可以得到史莱姆的体积,删除一个史莱姆可以减少的最大体积。

\(u\) 转移至 \(v\) 时,令 \(cur\) 表示 \(u\)\(ans_{v, 0}\) 的贡献,\(cur = ans_{0, u} - \max(0, dp_{0, v} - w) - w\),请看图,图中解释了为什么是这个贡献

image

所以我们就可以轻松得出式子

\[ans_{v, 0} = dp_{v, 0} + \max(0, k)\\ ans_{v, 1} = \max(dp_{v, 1}, \max(0, k) - \max(0, k - ans_{u, 1})) \]

查询时答案就是 \(ans_{0, c_i} - ans_{1, c_i} \times num_i\)

#include <bits/stdc++.h>using namespace std;using Pii = pair<long long, long long>;#define int long longconst int N = 2e5 + 5;int n, k, q, a[N];int dp[N][2], ans[N][2];vector<Pii> g[N];void dfs(int u, int f) {dp[u][0] = dp[u][1] = a[u];for (auto [v, w] : g[u]) {if (v == f) {continue;}dfs(v, u);int cur = dp[v][0] - w;dp[u][0] += max(0ll, cur);dp[u][1] = max(dp[u][1], max(0ll, cur) - max(0ll, cur - dp[v][1]));}
}void DFS(int u, int f) {ans[u][0] += dp[u][0];ans[u][1] = max(ans[u][1], dp[u][1]);for (auto [v, w] : g[u]) {if (v == f) {continue;}int cur = ans[u][0] - max(0ll, dp[v][0] - w) - w;ans[v][0] = max(0ll, cur);ans[v][1] = max(0ll, cur) - max(0ll, cur - ans[u][1]);DFS(v, u);}
}signed main() {ios::sync_with_stdio(0);cin.tie(0);freopen("slime.in", "r", stdin);freopen("slime.out", "w", stdout);cin >> n >> k >> q;for (int i = 1, u, v, w; i < n; i++) {cin >> u >> v >> w;g[u].push_back({v, w});g[v].push_back({u, w});}for (int i = 1, p, x; i <= k; i++) {cin >> p >> x;a[p] = x;}dfs(1, 0);DFS(1, 0);while (q--) {int u, x;cin >> u >> x;cout << ans[u][0] - x * ans[u][1] << "\n";}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

软件工程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、图片还是其他资源,都可以作为一个模块来处理。那么,模块化究竟是如何发展到今天的呢? 全局函数模式 最初的前端模块化尝试是通过 全局函数来实现的。例如,在一…

CF131C题解

贪心,优先队列,CF 2200传送门:https://codeforces.com/problemset/problem/134/C 关注到题目的两个限制:1. 一个人只能与另外同一人交换一张卡牌。2. 一个人只能交换自己原来颜色的卡牌。 对于2条限制条件,显然有贪心思路:尽量让更多的人手持原有的卡牌。对于当前待交换的…

『模拟赛』多校A层冲刺NOIP2024模拟赛03

『模拟赛记录』多校A层冲刺NOIP2024模拟赛03Rank 炸了,触底反弹A. 五彩斑斓(colorful) 签,又没签上。 考虑如何一步步优化暴力。最暴力的思想 \(\mathcal{O(n^4)}\) 枚举每个矩形,判断四个顶点颜色。稍微优化些,两次 \(\mathcal{O(n^2)}\) 跑出对于行/列每个点下一个与之…

加装spark-3.5.3

集群版本 hadoop-3.4.0 hive-3.1.3 zookeeper-3.9.2 hbase-2.6.0(1.0.0以上需要zookeeper-3.4.0以上) spark-3.5.3(只能选2.13.0) scala-2.13.0(jdk8仅支持x.x.0系)总结一下:JDK8和scala-2.13.0必选。1.安装scala 1.1 下载解压 tar zxvf scala-2.13.0.tgz 1.2 配置环境变…