SDOI/SXOI2022 做题笔记

SDOI/SXOI2022 做题笔记

持续更新中……

题目:https://www.luogu.com.cn/problem/list?tag=114%7C59&page=1

目录
  • SDOI/SXOI2022 做题笔记
    • [SDOI/SXOI2022] 小 N 的独立集
    • [SDOI/SXOI2022] 整数序列

[SDOI/SXOI2022] 小 N 的独立集

时间复杂度 \(O(n^2k^4)\)

ケロシの代码
const int N = 1e3 + 5;
const int P = 1e9 + 7;
inline int add(int x, int y) { return (x + y < P ? x + y : x + y - P); }
inline void Add(int & x, int y) { x = (x + y < P ? x + y : x + y - P); }
inline int sub(int x, int y) { return (x < y ? x - y + P : x - y); }
inline void Sub(int & x, int y) { x = (x < y ? x - y + P : x - y); }
inline int mul(int x, int y) { return (1ll * x * y) % P; }
inline void Mul(int & x, int y) { x = (1ll * x * y) % P; }
int fp(int x, int y) {int res = 1;for(; y; y >>= 1) {if(y & 1) Mul(res, x);Mul(x, x);}return res;
}
int n, k;
int fi[N], ne[N << 1], to[N << 1], ecnt;
int sz[N], dp[N][N * 5][6], f[N * 5][6], ans[N * 5];
void add_edge(int u, int v) {ne[++ ecnt] = fi[u];to[ecnt] = v;fi[u] = ecnt;
}
void dfs(int u, int fa) {sz[u] = 1;FOR(i, 1, k) dp[u][0][i] = 1;for(int i = fi[u]; i; i = ne[i]) {int v = to[i];if(v == fa) continue;dfs(v, u);FOR(i, 0, (sz[u] + sz[v]) * k) FOR(j, 0, 5) f[i][j] = 0;FOR(i, 0, sz[u] * k) FOR(j, 0, 5) if(dp[u][i][j])FOR(p, 0, sz[v] * k) FOR(q, 0, 5) if(dp[v][p][q])Add(f[i + p + q][max(i + p + q, i + j + p) - (i + p + q)], mul(dp[u][i][j], dp[v][p][q]));FOR(i, 0, (sz[u] + sz[v]) * k) FOR(j, 0, 5) dp[u][i][j] = f[i][j];sz[u] += sz[v];}
}
void solve() {cin >> n >> k;REP(_, n - 1) {int u, v;cin >> u >> v;add_edge(u, v); add_edge(v, u);}dfs(1, 0);FOR(i, 1, n * k) FOR(j, 0, 5) Add(ans[i + j], dp[1][i][j]); FOR(i, 1, n * k) cout << ans[i] << endl;
}

[SDOI/SXOI2022] 整数序列

ケロシの代码
const int N = 3e5 + 5;
const int B = 300;
const ll LNF = 1e18 + 128;
int n, q, a[N], b[N];
vector<int> e[N];
vector<PII> qs[N];
int p[N], len, c[N];
ll s[N], f[N << 1];
ll ans[N << 2];
void solve() {cin >> n >> q;FOR(i, 1, n) cin >> a[i];FOR(i, 1, n) cin >> b[i];FOR(i, 1, n) e[a[i]].push_back(i);map<PII, ll> mp;memset(f, 0x3f, sizeof f);FOR(i, 1, q) {int x, y;cin >> x >> y;if(SZ(e[x]) < SZ(e[y])) swap(x, y);if((SZ(e[x]) > B && SZ(e[y]) > B) || (SZ(e[x]) <= B && SZ(e[y]) <= B)) {if(mp.count({x, y})) {ans[i] = mp[{x, y}];continue;}int p1 = 0, p2 = 0; len = 0;while(p1 < SZ(e[x]) || p2 < SZ(e[y])) {if(p2 == SZ(e[y]) || (p1 < SZ(e[x]) && e[x][p1] < e[y][p2])) {p[++ len] = e[x][p1];p1 ++;}else {p[++ len] = e[y][p2];p2 ++;}}FOR(j, 1, len) c[j] = c[j - 1] + (a[p[j]] == x ? 1 : - 1);FOR(j, 1, len) s[j] = s[j - 1] + b[p[j]];ll res = - LNF;FOR(j, 0, len) {chmax(res, s[j] - f[N + c[j]]);chmin(f[N + c[j]], s[j]);}FOR(j, 0, len) f[N + c[j]] = LNF;ans[i] = mp[{x, y}] = res;}else {qs[x].push_back({y, i});}}FOR(x, 1, n) if(! qs[x].empty()) {set<int> S(ALL(e[x]));FOR(i, 1, n) c[i] = c[i - 1] + (a[i] == x);FOR(i, 1, n) s[i] = s[i - 1] + (a[i] == x ? b[i] : 0);for(auto h : qs[x]) {int y = FI(h);vector<int> ex;for(int pos : e[y]) {auto it = S.lower_bound(pos);if(it != S.end()) {ex.push_back(* it);S.erase(it);}it = S.lower_bound(pos);if(it != S.begin()) {it = prev(it);ex.push_back(* it);S.erase(it);}it = S.lower_bound(pos);if(it != S.begin()) {it = prev(it);ex.push_back(* it);S.erase(it);}}sort(ALL(ex));int p1 = 0, p2 = 0; len = 0;while(p1 < SZ(ex) || p2 < SZ(e[y])) {if(p2 == SZ(e[y]) || (p1 < SZ(ex) && ex[p1] < e[y][p2])) {p[++ len] = ex[p1];p1 ++;}else {p[++ len] = e[y][p2];p2 ++;}}int cnt = 0; ll sum = 0;ll res = - LNF;FOR(i, 0, len) {if(a[p[i]] == y) cnt --, sum += b[p[i]];chmax(res, s[p[i]] + sum - f[N + c[p[i]] + cnt]);chmin(f[N + c[p[i]] + cnt], s[p[i]] + sum);}ans[SE(h)] = res;cnt = 0; sum = 0;FOR(i, 0, len) {if(a[p[i]] == y) cnt --, sum += b[p[i]];f[N + c[p[i]] + cnt] = LNF;}for(int pos : ex) S.insert(pos);}}FOR(i, 1, q) cout << ans[i] << endl;
}

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

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

相关文章

P9017 [USACO23JAN] Lights Off G

前言 困了一下午, 仅仅只搞懂了个大概, 我们赶紧把这些题补了, 冷静一点 思路 观察大样例可以发现, 答案好像都不大 容易证明的是先用最多 \(n\) 次关闭所有开关, 然后在 \(2n\) 次打开每个灯, 这样一定不超过 \(3n\) 次就可以成功的打开所有灯 那么我们考虑以这个为突破口, 枚…

物联网数据处理-iris数据集(鸢尾花)

物联网数据处理-iris数据集(鸢尾花) 大作业题目读入 iris.txt 里的鸢尾花数据,不考虑标签信息(标签是用来监督学习用的,这里是无监督),利用 PCA(减少噪声,利于可视化) 将数据从 4 维降成 2 维 之后,进行以下操作:利用不同的方式构建邻接矩阵(高斯核,k-临近等)(…

基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要该通信系统主要用于图像传输,适用于对图像质量和传输可靠性要求较高的场景,如无人机图像传输、视频监控、无线电视广播等。在复杂的电磁环境…

SIP协议中与Dialog相关的概念

如下RFC文档所述:在SIP协议中,对话(Dialog)是由两个用户代理(User Agent,简称UA)之间持续一段时间的端到端关系,通过Call-ID、To-tag和From-tag来标识(即Dialog ID),用于对一个会话(Session)进行信令交互。对话代表一个上下文场景,据此来阐释相关的SIP消息(即一系…

HBuilderX运行到微信开发者工具

HBuilderX运行到微信开发者工具

快手MARM 文章理解

阅读了快手的论文 MARM,论文中的算法 符号看起来不容易理解。 对照图自己研究了下, 理解了。需要知道为什么(b) 和(c) 中 的中间结果是相同的。需要知道 masked-self-attention缓存是怎么处理,看箭头快手 MARM: Unlocking the Future of Recommendation Systems through Mem…

NSSCTF--Crypto--[CISCN 2023 初赛]badkey

NSSCTF Crypto [CISCN 2023 初赛]badkey[CISCN 2023 初赛]badkey task: from Crypto.Util.number import * from Crypto.PublicKey import RSA from hashlib import sha256 import random, os, signal, stringdef proof_of_work():random.seed(os.urandom(8))proof = .join([ra…

deque容器/构造函数/赋值操作/大小操作/插入和删除/数据存取/排序

deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度会比vector块 vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:…

CSS基础-长度单位

💖简介 在CSS中,长度单位分为绝对长度单位和相对长度单位。这些单位用于定义元素的尺寸、边距、填充、字体大小等属性值 vmin和vmax是CSS中的相对长度单位,它们基于视口(viewport)尺寸来定义元素的宽度或高度。这些单位使得元素的尺寸可以根据视口的大小进行缩放,从而有…

基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN

1.算法运行效果图预览 (完整程序运行后无水印) filePath =Test_data\悲伤1.wav类型:悲伤 识别置信度Vmax =0.9559 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)Labsn = []; % 遍历每种情绪 for i = 1:length(Em_kind)Labs0…

学习高校课程-软件设计模式-访客模式(lec13)

Visitor: Problem Example: exporting the graph into XML format 示例:将图表导出为 XML 格式Visitor: Solution Place the new behavior into a separate class called visitor The original object passed to the visitor’s method as an argument