当前位置: 首页 > news >正文

题解:[JAG 2025 Summer Camp #2] To All The Customers

对于这种有很多相交的二元限制,可以考虑建图。

对于 \((a_i,b_i)\),连无向边 \((a_i,b_i)\),得到 \(N\) 个点,\(M\) 条边的无向图。对于一条边 \((a_i,b_i)\),称 \(a_i\) 是这条边的 \(\mathrm{A}\) 端,\(b_i\) 是这条边的 \(\mathrm{B}\) 端。

注意到,对于每个 \(M\) 的排列 \(p_{1\sim M}\),如果合法,最后第 \(i\) 个人拿到的商品为 \(x_i\),那么每个合法的 \(p\) 会对应唯一的 \(x\)(很显然,也很重要)。所以考虑对于每个可能的 \(x\) 去计算有多少种取到 \(x\)\(p\)。对应到图上,就是要让每条边匹配它的一个端点。

每个连通块之间独立,可以分别计算,最后组合数合并。下面只考虑一个 \(n\) 个点,\(m\) 条边的连通图。

对于 \(m>n\),显然不可能让每条边匹配一个不同的端点,故方案数为 \(0\)

对于 \(m=n-1\),图是一棵树。此时最后一定会有恰好一个点没有匹配,将其作为树根,设为 \(rt\)。对于 \(rt\),要求它一定是所有与它相邻的边的 \(\mathrm{B}\) 端。然后可以发现,对于每条边 \(i\),它匹配的端点一定是 \(a_i,b_i\) 中深度较深的那个。如果是 \(b_i\),那么匹配 \(a_i\) 的那条边一定要在 \(i\) 之前;如果是 \(a_i\),可以发现只要限制了所有 \(x_i=b_i\) 的边,这些边就会自然地取到 \(a_i\)

所以考虑再建一张有向图,对于每个 \(x_i=b_i\)\(i\),连有向边 \(a_i\to b_i\),表示匹配 \(a_i\) 的边要在匹配 \(b_i\) 的边之前,那么合法的排列 \(p\) 的数量就是有向图的拓扑序。可以发现,每条边一定是原树上的父亲指向儿子,所以这一定是一个 \(n-1\) 个点(去掉了 \(rt\))的外向森林,拓扑序易求。这样可以 \(\mathcal O(n)\) 对于一个特定的 \(rt\) 求出答案。换根 dp 即可 \(\mathcal O(n)\) 对每个 \(rt\) 求出答案。

对于 \(m=n\),图是基环树。将环作为根,那么每条不在环上边也只能匹配深度较深的端点。设环上的点按顺序为 \(u_1,u_2,\dots,u_k\),那么环上边整体只有两种可能:要么所有 \((u_i,u_{(i\bmod k) + 1})\) 都匹配 \(u_i\),要么都匹配 \(u_{(i\bmod k) + 1}\)。所以 \(x\) 只有两种。

对于每种 \(x\),同上建有向图。可以发现对于不在环上的边,对应的有向边一定是从父亲指向儿子。对于环上的边,一定同时是 \(u_i\) 指向 \(u_{(i\bmod k) + 1}\) 或同时是 \(u_{(i\bmod k) + 1}\) 指向 \(u_i\)。而且注意到,如果 \(k\) 条环上边都对应了有向边,说明所有环上边都匹配到了 \(\mathrm{B}\) 端,这是不可能的,所以此时答案为 \(0\)。可以发现排除这种情况后,得到的有向图一定是一个 \(n\) 个点的外向森林,容易计算拓扑序。这部分复杂度也为 \(\mathcal O(n)\)

总复杂度 \(\mathcal O(n)\)

http://www.jsqmd.com/news/751793/

相关文章:

  • 3分钟快速为Windows 11 LTSC系统安装微软商店:完整指南与一键部署方案
  • ARM Cortex-M系统控制与中断控制器详解
  • 视频插入技术:LoRA与DiT在动态编辑中的应用
  • LLM性能预测新方法:上下文感知扩展定律解析
  • 博客三:NLP服务后端的实现和算法工程化
  • 2026廊坊市防水补漏公司权威推荐:卫生间、阳台、屋顶、地下室、飘窗、外墙漏水,专业防水公司TOP5口碑榜+全维度测评(2026年5月最新深度行业资讯) - 防水百科
  • Cursor设备标识重置:突破AI编辑器试用限制的终极解决方案
  • 2026年4月市面上评价高的保鲜柜实力厂家推荐,制冷管/制冷设备/冷藏库/医药阴凉库/制冷机组,保鲜柜直销厂家推荐 - 品牌推荐师
  • Apple Silicon与Windows on ARM:引擎原生构建与模拟层的底层性能调优指南
  • 工业物联网C# OPC UA开发实战(2026规范深度解密):含TSN时间敏感网络集成、PubSub安全增强与证书自动轮换
  • 使用nodejs与taotoken快速构建一个ai客服原型接口
  • BiliBiliCCSubtitle终极指南:三步下载B站字幕的完整教程
  • 我的STM32智能小车‘瘸腿’了?手把手教你用逻辑分析仪和万用表调试TB6612电机驱动与PWM信号
  • 基于AScript的python3脚本语言发布啦!
  • 为 OpenClaw 智能体工作流配置 Taotoken 作为后端大脑
  • NcmppGui:5分钟解锁NCM音乐文件的完整免费方案
  • GEO代运营核心技术拆解与优质服务商选择指南 - 奔跑123
  • WinUtil终极指南:3分钟掌握Windows系统优化与批量软件安装
  • 终极指南:如何用GBFR Logs免费DPS监控工具快速提升《碧蓝幻想:Relink》战斗效率
  • 2026最权威的AI辅助写作网站解析与推荐
  • Translumo终极指南:5分钟掌握实时屏幕翻译工具,打破语言障碍
  • VR-Reversal:零门槛实现3D VR视频在普通设备上的沉浸式播放
  • 终极Unity游戏翻译解决方案:XUnity.AutoTranslator完整指南
  • ETL助睿实验入门 - 订单利润分流数据加工(保姆级步骤 + 踩坑记录)
  • 观察不同时段通过 Taotoken 调用全球模型的响应速度表现
  • Betaflight飞行控制器固件:从零开始的无人机飞控入门完整指南
  • GEO代运营技术逻辑拆解与合规服务商选择指南 - 奔跑123
  • Node js 服务中集成 Taotoken 实现稳定高效的大模型调用方案
  • 天津昊力复合钢管制造:沧州天然气涂覆钢管出售厂家 - LYL仔仔
  • 从‘能用’到‘好用’:给你的Vulhub靶场加点‘料’(自定义漏洞、网络配置与镜像加速)