解题报告-P12026 [USACO25OPEN] Compatible Pairs S

news/2025/9/19 17:25:04/文章来源:https://www.cnblogs.com/Starpop/p/19101338

P12026 [USACO25OPEN] Compatible Pairs S

题目描述

在遥远的乡村,农夫约翰的奶牛并非普通的农场动物——它们隶属于一个秘密的奶牛情报网络。每头奶牛都有一个由精英密码学家精心分配的ID号码。但由于农夫约翰随意的标记系统,部分奶牛出现了重复ID的情况。

农夫约翰记录到共有 \(N\)\(1\le N\le 2\cdot 10^5\))个不同的ID号码,对于每个唯一ID \(d_i\)\(0\le d_i\le 10^9\)),有 \(n_i\)\(1\le n_i\le 10^9\))头奶牛共享该ID。

奶牛们只能成对交流,它们的加密通信有一个严格规则:两头奶牛仅当不是同一头牛且它们的ID号码之和等于 \(A\)\(B\)\(0\le A\le B\le 2\cdot 10^9\))时才能交换信息。每头奶牛同一时间只能参与一次对话(即不能同时属于多对通信组合)。

农夫约翰希望最大化互不干扰的通信对数来确保最佳信息流通。你能计算出最多可以同时建立多少对通信吗?

输入格式

第一行包含 \(N\)\(A\)\(B\)
接下来 \(N\) 行每行包含 \(n_i\)\(d_i\)。所有 \(d_i\) 均不相同。

输出格式

可同时建立的最大互不干扰通信对数。
注意:由于涉及大整数运算,可能需要使用 64 位整数类型(如C/C++中的 long long)。

输入输出样例 #1

输入 #1

4 4 5
17 2
100 0
10 1
200 4

输出 #1

118

说明/提示

解释:
ID为 \(0\) 的奶牛可与 ID 为 \(4\) 奶牛通信(ID 之和为 \(4\))。由于共有 \(100\) 头 ID \(0\) 的奶牛和 \(200\) 头 ID \(4\) 的奶牛,最多可组成 \(100\) 对通信组合。

ID 为 \(4\) 的奶牛还可与 ID 为 \(1\) 的奶牛通信(ID 之和为\(5\))。此时剩余 \(100\) 头 ID \(4\) 的奶牛和 \(10\) 头 ID \(1\) 的奶牛可组成 \(10\) 对通信组合。

最后,ID 为 \(2\) 的奶牛可与其他同 ID 奶牛通信。\(17\) 头 ID \(2\) 的奶牛最多可组成 \(8\) 对通信组合(\(\lfloor17/2\rfloor=8\))。

总计 \(100+10+8=118\) 对通信组合,可以证明这是最大可能值。

  • 测试点 \(3\sim4\)\(A=B\)
  • 测试点 \(5\sim7\)\(N\le 1000\)
  • 测试点 \(8\sim12\):无额外限制。

解题报告

(施工单:补全建模后最终情况的证明和拓扑排序的正确性证明)

直接图论建模!!!

对于一个 \(\text{id}\),我们建出以下两条边:

  • \(\text{id}<A,\text{id} \rightarrow A-\text{id}\)
  • \(\text{id}<B,\text{id} \rightarrow B-\text{id}\)

有对称性可知,也有这两条边:

  • \(A-\text{id} \rightarrow A\)
  • \(B-\text{id} \rightarrow B\)

所以这是个无向图。

由于题目保证每一个 \(\text{id}\) 唯一,那么每一个和为 \(A\) 的数对是唯一的,每一个和为 \(B\) 的数对也是唯一的,所以最后我们的图一定是一个可能带着自环的链。

直接拓扑排序。

代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N=201100;#define ckmax(x,y) ( x=max(x,y) )
#define ckmin(x,y) ( x=min(x,y) )inline int read()
{int f=1,x=0; char ch=getchar();while(!isdigit(ch)) { if(ch=='-') f=-1; ch=getchar(); }while(isdigit(ch))  { x=x*10+ch-'0';    ch=getchar(); }return f*x;
}int n,S1,S2;
int ans;
int w[N],p[N];
vector<int> e[N];
map<int,int> col;inline void toposort()
{queue<int> q;for(int i=1;i<=n;i++)if(e[i].size()==1)q.push(i);while(!q.empty()){int u=q.front(); q.pop();for(int i=0;i<e[u].size();i++){int v=e[u][i];if(u==v){ans+=w[u]/2;w[u]%=2;continue;}if(w[v]){int tmp=min(w[u],w[v]);ans+=tmp,w[u]-=tmp,w[v]-=tmp;q.push(v);}}}
}signed main()
{n=read(),S1=read(),S2=read();for(int i=1;i<=n;i++){w[i]=read(),p[i]=read();col[p[i]]=i;}for(int i=1;i<=n;i++){if(p[i]<=S1 && col[S1-p[i]])e[i].push_back(col[S1-p[i]]);if(S1==S2) continue;if(p[i]<=S2 && col[S2-p[i]])e[i].push_back(col[S2-p[i]]);}toposort();printf("%lld",ans);return 0;
}

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

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

相关文章

深入解析:Xilinx Video Mixer

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

maxu

https://v1.paoliangcloud.com/publicwowo.html?to=85ed9abcfe82``

makefile 入门1

makefile 入门1目标 目标的语法非常简单targets: prerequisitesrecipes... 或者 targets: prerequisites ; recipesrecipes...当执行目标时,make会检测prerequisites中的所有文件是否存在,如果都存在则执行targets后…

详细介绍:【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)

详细介绍:【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

iOS 26 能耗检测实战指南 如何监测 iPhone 电池掉电、Adaptive Power 模式效果与后台耗能问题(uni-app 与原生 App 优化必看)

本文结合 iOS 26 新增的 Adaptive Power 模式与电池界面功能,介绍如何检测 iPhone 能耗问题(包括启动耗电、后台耗电、动画特效与资源加载耗电等),并结合 Instruments、克魔等工具给出 uni-app 项目的实战优化指南…

Transformer的个人理解

Transformer工作原理 分词 文本进来之后,首先经过Tokenizer(分词器)分割成很多个token。每个token都会赋予一个从0开始的ID,用于后续索引。 然后通过一个embedding层,将token转换成一个多维向量,也叫做embedding…

国标GB28181平台EasyGBS如何实现企业园区视频监控一体化管理?

国标GB28181平台EasyGBS如何实现企业园区视频监控一体化管理?企业园区安防系统面临多品牌设备兼容难、系统孤立、管理效率低等痛点。本文详细探讨基于国标GB28181协议的EasyGBS视频平台如何为企业园区提供完整的视频监…

360环视硬件平台为什么推荐使用米尔RK3576开发板?

在汽车智能化和智慧安防快速发展的今天,360环视系统 已成为保障行车与场景安全、提升体验的重要技术。无论是自动泊车、驾驶辅助,还是智慧社区监控,核心诉求都是能够接入 多路摄像头,并通过高效的 推流 实现低延迟…

C语言弱函数

C语言弱函数project/ ├── core/ │ └── system_init.c // 核心框架代码,包含弱函数 ├── boards/ │ └── my_board.c // 板级特定代码,提供强函数 └── main.c // 主程序 /…

高质量票据识别数据集:1000张收据图像+2141个商品标注,支持OCR模型训练与文档理解研究

​获取更多高质量数据集,请访问典枢数据交易平台:https://dianshudata.com/引言与背景 在数字化转型的浪潮中,票据识别技术已成为金融、零售、餐饮等行业自动化处理的核心技术。传统的票据处理依赖人工录入,效率低…

1202_InnoDB中一条UPDATE语句的执行流程

InnoDB中一条UPDATE语句的执行流程可以概括为以下步骤和图示:下面是每个步骤的详细说明: 第一步:连接器与权限验证 (Client → Server Layer)建立连接:客户端应用程序(如Java程序、MySQL CLI)与MySQL服务器建立连…

1201_mysql查询语句select执行流程

查询语句select执行流程,如下图所示,其核心流程可概括为: flowchart TD A["客户端提交 SELECT 语句"] --> B["连接器<br>管理连接, 权限验证"] B --> C["查询缓存<br>(…

记录---vue3项目实战 打印、导出PDF

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 一 维护模板 1 打印模板:<template> <div class="print-content"> <div v-for="item in data.detailList" :key="…

node.js安装(绿色版)

1、官方下载,选择【独立文件(.zip)】下载https://nodejs.org/zh-cn/download/ 2、解压到C:\Program Files\nodejs3、在安装目录下创建以下两个目录node_global(默认:C:\Program Files\nodejs) node_cache(默认:C…

selenium完整版一览 - 教程

selenium完整版一览 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—开发环境搭建(二) - 创龙科技

本文围绕创龙科技研发的开发环境搭建需求,详细阐述了完整流程:先安装 VMware 16.2.5 虚拟机,再基于虚拟机部署 Ubuntu 20.04.6 系统,含系统配置、虚拟机工具安装及共享目录设置;还讲解了 GDB 10.2 调试工具的环境…

ctfshow web55

<?php/* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 20:03:51 # @email: h1xa@ctfer.com # @link: https://ct…

ctfshow web58

<?php/* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ct…

ctfshow web57

<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfe…