尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[ABC422F-G] 题解

[ABC422F-G] 题解
📅 发布时间:2026/6/20 8:03:43
[ABC422F-G] 题解QwQ

[ABC422F-G] 题解

F - Eat and Ride

考虑 DP,DP 状态要么压和要么压长度,如果压和就很直接,但是显然复杂度会爆炸,如果压长度的话,可以发现每到一个新点都要算:这条路径中在它后面的点的个数乘上它的点权,所以考虑枚举路径总长度 \(d\),那么设计状态 \(f_{i, j}\) 表示从 \(1\) 出发到达 \(i\) 经过 \(j\) 条边的最小代价,转移是 \(f_{i, j}\rightarrow f_{v, j + 1} + (d - j)a_v\),可以发现把 \(d - j\) 换元后不用枚举长度了,转移变成了 \(f_{i, j}\rightarrow f_{v, j - 1} + ja_v\),按照 \(j\) 从大到小的顺序转移即可。

时间复杂度:\(O(n^2)\)。

// Problem: F - Eat and Ride
// Contest: AtCoder - AtCoder Beginner Contest 422
// Author: Moyou#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#define int long long
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
typedef pair<PII, int> PIII;
typedef long long ll;
const int N = 5000 + 10;int n, m, a[N], dist[N][N];
vector<int> g[N];
bool st[N][N];
void dijkstra(int s) {priority_queue<PIII, vector<PIII>, greater<PIII> > heap;memset(dist, 0x3f, sizeof dist), memset(st, 0, sizeof st);for(int i = 0; i <= n; i ++) dist[1][i] = i * a[1];for(int d = n; d; d --) {for(int t = 1; t <= n; t ++) {for(auto v : g[t])if(dist[v][d - 1] > dist[t][d] + (d - 1) * a[v])dist[v][d - 1] = dist[t][d] + (d - 1) * a[v];}}
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> a[i];for(int i = 1, a, b; i <= m; i ++) cin >> a >> b, g[a].push_back(b), g[b].push_back(a);dijkstra(1);for(int i = 1; i <= n; i ++)cout << dist[i][0] << '\n';return 0;
}

G - Balls and Boxes

第一问直接做完全背包,第二问需要给每个盒子里面的球分配编号,但是同一个盒子里面没有顺序,所以这是一个多重集排列,也就是最后只需要给第一问的答案乘上系数:

\[\dfrac {n!}{a!b!c!} \]

\(a, b, c\) 分别代表有几个球放在 \(A, B, C\) 盒子里面。

提取 \(n!\),考虑完全背包的转移式(假设转移 \(B\) 盒子):

\[f_i = \sum_{j}f_{i - j}\dfrac 1{j!}[j\equiv 0\pmod {b}] \]

不难发现这个是卷积的形式,用 FFT/NTT 优化即可。
时间复杂度:\(O(n\log n)\)。

// Problem: F - Eat and Ride
// Contest: AtCoder - AtCoder Beginner Contest 422
// Author: Moyou#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#define int long long
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
typedef pair<PII, int> PIII;
typedef long long ll;
const int N = 5000 + 10;int n, m, a[N], dist[N][N];
vector<int> g[N];
bool st[N][N];
void dijkstra(int s) {priority_queue<PIII, vector<PIII>, greater<PIII> > heap;memset(dist, 0x3f, sizeof dist), memset(st, 0, sizeof st);for(int i = 0; i <= n; i ++) dist[1][i] = i * a[1];for(int d = n; d; d --) {for(int t = 1; t <= n; t ++) {for(auto v : g[t])if(dist[v][d - 1] > dist[t][d] + (d - 1) * a[v])dist[v][d - 1] = dist[t][d] + (d - 1) * a[v];}}
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> a[i];for(int i = 1, a, b; i <= m; i ++) cin >> a >> b, g[a].push_back(b), g[b].push_back(a);dijkstra(1);for(int i = 1; i <= n; i ++)cout << dist[i][0] << '\n';return 0;
}

相关新闻

  • c# Listdynamic 按字段排序
  • 双活、异地多活架构怎么设计才不翻车? - 教程
  • 制造业碳足迹追踪:开源能源管理系统如何助力企业实现“碳数据可视化”?

最新新闻

  • NVIDIA Profile Inspector完全指南:解锁显卡隐藏功能的终极利器
  • 2026 常熟贵金属回收市场全攻略|黄金变现高价出手避坑指南 - 速递信息
  • 研究生必备9款免费AI论文神器半天生成12万字带真实文献引用 - 麟书学长
  • 基于Miniblink49构建轻量级UI自动化测试框架:从原理到实践
  • 从8小时到15分钟:OpCore-Simplify如何让普通用户也能轻松配置Hackintosh?
  • 微信二次开发:JSSDK安全授权、Ticket多级缓存与动态签名防刷架构

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号