QBXT2025S刷题 Day6

news/2025/10/7 23:17:30/文章来源:https://www.cnblogs.com/SigmaToT/p/19129011

T2

这道题是树形 \(\mathcal{DP}\),我们注意到如果一个点能和他的一个子树合并成为一个三叉,那么可以是以下四种情况。
image
然后我们的状态记录一下当前有 \(i\) 个链,\(j\) 个倒 "Y"。
这样,我们可以先让 \(i\) 个链三三匹配。
那么如果 \(j \geq i\%3\),那么这 \(i\) 个链就可以完全用掉。
我们看第一种情况,我们要留下一个链。
因此要满足 \(j\geq (i-1)\%3\)
其他的情况同理。
再就是我们要把状态压缩一下。
我们注意到 \(i = 3\)\(i = 0\) 是两种不同的状态,因为我们不能从 \(0\) 中取出两条链。
\(i = 4\) 同理。
因此我们状态要记录到 \(5\)
\(j\) 要记录到 \(3\),这个很好看出来。
代码:

// ☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░▄▄▄▄▄▄▄░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░█▀▀▀▄░░▀▀▀▄▄░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░█▄▄▄░▀▀▄▄░░░▀▀▄░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░▀▀▄▄░▀▄░░░░▀▄░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀▄░▀▄░░░░▀▄░░░░░░░░
// ░░░░░░░░░░░░░░░░░▄▀▀▀▀▀▀▀▀▄░░░░▀▄░█░░░░▀▄░░░░░░░
// ░░░░░░░░░░░░░░░▄▀░░░░░░░░░░█░░░░░█░█░░░░▀▄░░░░░░
// ░░░░░░░░░░░░░▄▀░░░░░░░░░░░▄█░░░░░░█░█░░░░▀▄░░░░░
// ░░░░░░░░░░░▄▀░░░░░░░░░░░▄▀░█░░░░░░░█░█░░░░█░░░░░
// ░░░░░░░░░▄▀░░░░░░░░░░░░█░▄▀░░░░░░░░░█▀█░░░░█░░░░
// ░░░░░░░░█░░░░░░░░░░░░░░░▀▄░░░░░░░░░░▀▄█░░░░█░░░░
// ░░░░░░░░█▄░░░░░░░░▄▄░░░░░░▀▄░░░░░░░░░██░░░░█░░░░
// ░░░░░░░░█░▀▄░░░░▄▀░░▀▄░░░░░░▀▄░░░░░░░██░░░░█░░░░
// ░░░░░░░░░▀▄░▀▄▄▀░▄▀▀▄░▀▄░░░░░░▀▄░░░░░█░░░░░█░░░░
// ░░░░░░░░░░░▀▄█░▄▀░░░░▀▄░▀▄░░░░░░▀▄░░▄▀░░░░▄█░░░░
// ░░░░░░░░░░░░░▀▀░░░░░░░░▀▄░▀▄░░░░░░▀▄▀░░░░░██░░░░
// ░░░░░░░░░░▄▀▀▀▀▄░░░░░░░░░▀▄░▀▄░░░░░░░░░░░██░░░░░
// ░░░░░░▄▄▀▀░░░░░░█▄░░░░░░░░░▀▄░█░░░░░░░░░▄█▀░░░░░
// ░░░░▄▀░░░░░░░░░░░░▀▀▀▄▄▄▄▄▄▄▄▀░░░░░░░░░░▀█░░░░░░
// ░░░█░░░░░░░░░▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀▄░░░░
// ░░█░░░░░░░░▄▀░▀█░░░░░░░░░░░░░░░░░░█▀▀█░░░░░░▀▄░░
// ░░█░░░░░░░▄▀▄▀▄░▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▀▀▀░▄▄░▀█░░░░░█░░
// ░░█▀▄▄▄▄▀▀░▄▀░░▀▄▄▄▄░░░░░░░░░░░▄▄▄▀░░▀▄░▀▄▄▄▀█░░
// ░░▀▄░░░░▄▄▀░░░░░░░░░▀▀▀▀▀▀▀▀▀▀▀░░░░░░░░▀▄░░░▄▀░░
// ░░░░▀▀▀▀░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀▀▀░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭☭
#include <iostream>
#include <vector>
#define int long longusing std::cin;
using std::cout;
const int N = 1e5 + 10;
typedef long long ll;
struct Edge
{int to, w;
};int now[8][6];
int son[N][6];
int dp[N][8][6];
std::vector<Edge> e[N];void DP(int x, int father)
{dp[x][0][0] = 0;for (auto nxt : e[x]){int to = nxt.to;int val = nxt.w;if (to == father)continue;DP(to, x);for (int i = 0; i <= 5; ++i){for (int j = 0; j <= 3; ++j)now[i][j] = -1e18 - 7;}for (int i = 0; i <= 5; ++i){for (int j = 0; j <= 3; ++j){now[i][j] = std::max(now[i][j], dp[x][i][j] + son[to][0]);now[i][std::min(j + 1, 3ll)] = std::max(now[i][std::min(j + 1, 3ll)], dp[x][i][j] + val + std::max(son[to][2], son[to][3]));now[i == 5 ? 3 : i + 1][j] = std::max(now[i == 5 ? 3 : i + 1][j], dp[x][i][j] + val + std::max(son[to][0], son[to][1]));}}for (int i = 0; i <= 5; ++i){for (int j = 0; j <= 3; ++j)dp[x][i][j] = now[i][j];}}for (int i = 0; i <= 5; ++i){for (int j = i % 3; j <= 3; ++j)son[x][0] = std::max(son[x][0], dp[x][i][j]);}for (int i = 0; i <= 4; ++i){for (int j = i % 3; j <= 3; ++j)son[x][1] = std::max(son[x][1], dp[x][i + 1][j]);}for (int i = 0; i <= 3; ++i){for (int j = i % 3; j <= 3; ++j)son[x][2] = std::max(son[x][2], dp[x][i + 2][j]);}for (int i = 0; i <= 5; ++i){for (int j = i % 3; j <= 2; ++j)son[x][3] = std::max(son[x][3], dp[x][i][j + 1]);}
}signed main()
{int t;cin >> t;while (t--){int n;cin >> n;for (int i = 1; i <= n; ++i)e[i].clear();for (int i = 1; i < n; ++i){int u, v, w;cin >> u >> v >> w;e[u].push_back((Edge){v, w});e[v].push_back((Edge){u, w});}for (int i = 1; i <= n; ++i){for (int j = 0; j <= 5; ++j){for (int k = 0; k <= 3; ++k){dp[i][j][k] = -1e18 - 7;son[i][k] = -1e18 - 7;}}}DP(1, 0);cout << son[1][0] << '\n';}return 0;
}

T3

这道题我们可以对 \(e_i \geq \dfrac{E}{2}\)\(e_i < \dfrac{E}{2}\) 进行两两分组。
如果都第一组里,就可以任意交换。
我们记录每一个第一组最左,最右可以走到哪。
我们发现这些形成的区间要么是完全包含,要么是不交。
因此这些形成了一个树形的结构。
我们直接使用类似树形 \(\mathcal{DP}\) 的方法做就行。
代码:

#include <iostream>
#include <vector>
#include <algorithm>
#define int long longusing std::cin;
using std::cout;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
struct Node
{int min;Node(){min = 2e9 + 7;}void init(int v){min = v;}friend Node operator+(const Node &l, const Node &r){Node ret;ret.min = std::min(l.min, r.min);return ret;}
} z[N << 2];int ans = 1;
int n, E;
int po;
int ee[N];
int l[N];
int r[N];
int e[N];
int sum[N];
std::vector<std::pair<int, int>> p;#define root 1, n, 1
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1void build(int l, int r, int rt)
{if (l == r){z[rt].init(ee[l]);return;}int mid = (l + r) >> 1;build(lson);build(rson);z[rt] = z[rt << 1] + z[rt << 1 | 1];
}
int query1(int l, int r, int rt, int nowl, int nowr, int k)
{if (z[rt].min > k || nowr < nowl)return 0;if (l == r)return l;int mid = (l + r) >> 1;int now = 0;if (nowr > mid)now = query1(rson, nowl, nowr, k);if (nowl <= mid && now == 0)now = query1(lson, nowl, nowr, k);return now;
}
int query2(int l, int r, int rt, int nowl, int nowr, int k)
{if (z[rt].min > k || nowr < nowl)return n + 1;if (l == r)return l;int mid = (l + r) >> 1;int now = n + 1;if (nowl <= mid)now = query2(lson, nowl, nowr, k);if (nowr > mid && now == n + 1)now = query2(rson, nowl, nowr, k);return now;
}
int dfs()
{int x = po++;int nowsize = 1;while (po < p.size() && p[po].second <= p[x].second)nowsize += dfs();ans = 1ll * ans * (nowsize + sum[p[x].second - 1] - sum[p[x].first]) % mod;return nowsize;
}signed main()
{freopen("str.in", "r", stdin);freopen("str.out", "w", stdout);cin >> n >> E;for (int i = 1; i <= n; ++i){cin >> e[i];ee[i] = (e[i] <= (E >> 1) ? e[i] : 2e9 + 7);}build(root);for (int i = 1; i <= n; ++i){if (e[i] > (E >> 1)){l[i] = query1(root, 1, i - 1, E - e[i]);r[i] = query2(root, i + 1, n, E - e[i]);sum[i] = sum[i - 1];}elsesum[i] = sum[i - 1] + 1;}for (int i = 1; i <= n; ++i){if (e[i] > (E >> 1))p.push_back({l[i], r[i]});}std::sort(p.begin(), p.end(), [&](const std::pair<int, int> &a, const std::pair<int, int> &b){ return (a.first != b.first ? a.first < b.first : a.second > b.second); });sum[n + 1] = sum[n];po = 0;while (po < p.size())dfs();cout << ans << '\n';return 0;
}

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

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

相关文章

dx为什么用com

dx为什么用com1. DirectX 的历史背景DirectX 是 90 年代微软为 Windows 游戏/多媒体开发出的 API。当时 Windows 上最通用的组件化技术就是 COM(Component Object Model)。DirectX 各子系统(D3D、DirectSound、Dire…

我的网站现在没有排名_我想问是不是花钱做百度推广就会有排名网站怎么加入百度网盟

一、前言 本人面试已经很久之前了&#xff0c;分享一下我做美团面试官的经历吧。 美团上海面试&#xff0c;2-1及以下美团是不社招的&#xff0c;校招和2-2~2-3社招一般是三面&#xff0c;格外优秀3-1及以上会加签面试。初面技术基础&#xff0c;二面业务感知和技术项目&#…

北京网站制作闪快网站备案手机号

每到周末的时候&#xff0c;我就感到压抑&#xff0c;无处可去&#xff0c;无事可做&#xff0c;我为什么那么在乎别人的看法呢?从不主动和人交流&#xff0c;话少的可怜&#xff0c;我一周说的话手指都能数出来&#xff0c;总是感到尴尬&#xff0c;不说话还常常苦闷别人不理…

图书馆网站建设工作阿里云企业网站搭建

很多人的电脑或者手机上都离不开一款好用的便签软件&#xff0c;使用便签软件可以帮助大家记事&#xff0c;提醒大家按时完成各项任务&#xff0c;但是自带的记事本便签软件不论从外观还是功能方面都有一定的欠缺&#xff0c;在使用过程中很容易耽误事情。 功能全面外观好看的…

建设网站的内容规划网络公司seo教程

Hello&#xff0c;今天事10月27日&#xff0c;距离刚开始写博客已经过去挺久了&#xff0c;我也不知道是什么让我坚持这么久&#xff0c;但是学校的课真的很多&#xff0c;很少有时间多出来再学习&#xff0c;有些科目马上要考试了&#xff0c;我还不知道我呢不能过哈哈哈&…

建立自己的平台网站吗php开发的大型网站有哪些

1、实验目的 通过本实验可以掌握&#xff1a; CLI的各种工作模式个CLI各种编辑命令“?” 和【Tab】键使用方法IOS基本命令网络设备访问限制查看设备的相关信息 2、实验拓扑 CLI的使用与IOS基本命令使用拓扑如下图所示。 3、实验步骤 &#xff08;1&#xff09;CLI模式的切…

CF2145 Educational Codeforces Round 183 (Rated for Div. 2) 游记

高罚时开出三题,掉分 $93$,心如止水。省流 高罚时开出三题,掉分 \(93\),心如止水。10.6 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 前一天 \(qwsxza\) 一把上分 \(136\) 极大的激励了我,今天在电脑前不…

江苏网站备案要求如何做网站的百科

大多数WordPress站点首页默认都是显示最新发布的文章列表&#xff0c;不过有些站点比较特殊&#xff0c;只想显示某一篇文章的全部内容&#xff0c;那么应该怎么设置呢&#xff1f; 其实&#xff0c;WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…

如何做网站效果更好WordPress自定义古腾堡

搜索引擎推广是一种有效提升品牌影响力的推广策略。通过关键词优化、广告创意设计、定向投放和数据分析与优化等实践技巧&#xff0c;可以提高品牌的知名度、点击率和转化率。在实施引擎霸屏推广之前&#xff0c;还需对实践效果进行评估&#xff0c;以确保推广策略的有效性和适…

52个AI工具

52个AI工具1. 研究类专注于信息检索、深度分析与知识处理,为学术研究、商业调研提供高效支持。ChatGPT:OpenAI 推出的多模态模型,支持图文输入、文件解析与代码生成,可通过自定义指令优化输出风格,还能利用 Canva…

可观测专题【左扬精讲】——《Go 语言实现企业级 APM 监控系统实战:从 0 到 1 搭建高性能监控平台》

可观测专题【左扬精讲】——《Go 语言实现企业级 APM 监控系统实战:从 0 到 1 搭建高性能监控平台》

多区域多 VLAN 网络搭建与访问控制及服务器部署实验

前言 随着企业数字化转型加速与校园信息化建设深化,网络架构的复杂性与功能性需求持续提升。现代网络不仅需要实现终端设备的基础接入,更需满足多区域隔离、精细化访问控制、关键服务稳定部署及网络资源高效利用等核…

2025方钢、扁钢、圆钢、光轴、六角钢、异型钢、冷拉/冷拔方钢、冷拉/冷拔扁钢、冷拉/冷拔圆钢、冷拉/冷拔六角钢、冷拉/冷拔异型钢、热轧方钢/扁钢厂家权威推荐榜:坚固耐用与精准定制口碑之选

在建筑、机械制造、钢结构工程等领域,方钢作为关键结构材料,其质量直接关系到工程安全与使用寿命。随着市场需求日益多元化,采购方不仅关注材料的机械性能,更对厂家的定制能力、技术实力和售后服务提出更高要求。为…

Tina_Linux_系统软件 开发指南

1 概述 编写目的:本文档作为Allwinner Tina Linux系统平台开发指南,旨在帮助软件开发工程师、技术支持工程师快速上手,熟悉Tina Linux系统的开发及调试流程。 适用范围:Tina Linux v3.5及以上版本。 2 Tina系统资料…

实用指南:C++ 建造者模式:简单易懂的设计模式解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站做子页面怎么做的kompozer wordpress

【导读】EF Core 5.0伴随着.NET 5.0发布已有一段时日&#xff0c;本节我们来预估当大批量新增数据时&#xff0c;大概是多少区间我们应该考虑SQLBulkCopy而不是EF CoreSQLBulkCopy早出现于.NET Framework 2.0&#xff0c;将数据批量写入利用此类毫无疑问最佳&#xff0c;虽其来…

企业网站开发模板WordPress hitokoto

大语言模型的定义 大语言模型&#xff08;英文&#xff1a;Large Language Model&#xff0c;缩写LLM&#xff09;&#xff0c;也称大型语言模型&#xff0c;是一种人工智能模型&#xff0c;旨在理解和生成人类语言。它们在大量的文本数据上进行训练&#xff0c;可以执行广泛的…

松岗做网站网站dns服务

方法中的参数&#xff0c;形参&#xff08;形式参数&#xff09;和实参&#xff08;实际参数&#xff09;简述 形参&#xff08;形式参数&#xff09;&#xff1a;表示在定义的方法的时候书写的参数&#xff0c;形参规定了参数的个数、类型、顺序 形参相当于局部变量的声明&…

GO_基础2

控制语句条件语句if语句、if ... else 语句, if嵌套语句、if...else...if语句、循环语句简单for循环for作为无限循环for作为while循环for循环中的简单范围i和j是分配迭代值的变量。它们也称为迭代变量。第二个变量,即…

深入解析:基于Python学习《Head First设计模式》第五章 单件模式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …