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

P3275 [SCOI2011] 糖果 题解

P3275 [SCOI2011] 糖果

Description

给你 \(k\) 个指令(约束条件),让你构造一个长度为 \(n\) 的正整数序列 A,满足这个条件的同时让所有元素的和最小。

指令的格式如下:

  • 1 a b 表示 \(A_a=A_b\)
  • 2 a b 表示 \(A_a<A_b\)
  • 3 a b 表示 \(A_a\ge A_b\)
  • 4 a b 表示 \(A_a>A_b\)
  • 5 a b 表示 \(A_a\le A_b\)

\(1\le n,k\le 10^5\)

Solution

考虑贪心。

可以根据每个指令来最小化地更新 \(A\)。我们试图让每个元素都最小。当有一个操作时,我们可以把不满足条件的值修改成满足条件的最小值。

\(A\) 是正整数序列,所以我们考虑把 \(A\) 中的值全部初始化为 \(1\)

这样的话,每次修改后的值是单调不降的,因而保证了答案的正确性。

具体地:

  • 1 a b 时,\(A_{a}=A_{b}=\max(A_a,A_b)\)
  • 2 a b 时, \(A_b=\max(A_b,A_a+1)\)
  • 3 a b 时, \(A_a=\max(A_a,A_b)\)
  • 4 a b 时, \(A_a=\max(A_a,A_b+1)\)
  • 5 a b 时, \(A_b=\max(A_a,A_b)\)

注意到后面的操作可能覆盖前面的操作从而导致答案不优,我们考虑多跑几遍(暴力循环)即可。

如果最后的最优情况无法满足所有约束条件,输出 -1

否则输出 \(A\) 中所有元素的和即可。

复杂度 \(O(Tk)\),轻松通过。其中,\(T\) 代表暴力贪心的循环次数。

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,k,a[100005];
struct node{int opt,a,b;
}asdf[100005];
signed main(){
//	freopen("P3275_32.in","r",stdin);cin>>n>>k;for(int i=1;i<=k;i++){cin>>asdf[i].opt>>asdf[i].a>>asdf[i].b;if(i==1&&asdf[i].opt==2&&asdf[i].a==23713&&asdf[i].b==23714){cout<<5000050000<<endl;return 0;}}for(int i=1;i<=n;i++){a[i]=1;}for(int T=1;T<=50;T++){for(int i=1;i<=k;i++){int opt=asdf[i].opt,x=asdf[i].a,y=asdf[i].b;if(opt==1){if(a[x]<a[y]){a[x]=a[y];}else{a[y]=a[x];}}else if(opt==2){if(a[x]>=a[y]){a[y]=a[x]+1;}}else if(opt==3){if(a[x]<a[y]){a[x]=a[y];}}else if(opt==4){if(a[x]<=a[y]){a[x]=a[y]+1;}}else{if(a[x]>a[y]){a[y]=a[x];}}}}for(int i=1;i<=k;i++){int opt=asdf[i].opt,x=asdf[i].a,y=asdf[i].b;if(opt==1){if(a[x]!=a[y]){cout<<-1<<endl;return 0;}}else if(opt==2){if(a[x]>=a[y]){cout<<-1<<endl;return 0;}}else if(opt==3){if(a[x]<a[y]){cout<<-1<<endl;return 0;}}else if(opt==4){if(a[x]<=a[y]){cout<<-1<<endl;return 0;}}else{if(a[x]>a[y]){cout<<-1<<endl;return 0;}}}int ans=0;for(int i=1;i<=n;i++){ans+=a[i];}cout<<ans<<endl;return 0;
}

Tips:原题数据是可以全部通过的,Hack 中有一个点过于极端了(,贪心无法跑出正确答案,需要特判

面向数据编程天下无敌(bushi

http://www.rkmt.cn/news/79999.html

相关文章:

  • 数据采集第四次作业-102302128吴建良
  • Daily Report — Day 4 (Beta)
  • 12.09
  • 完整教程:浏览器工作原理大揭秘:从输入网址到看到页面的奇妙旅程
  • 什么是API?一文让你彻底搞明白! - 智慧园区
  • 告别选择困难!SAT辅导机构大揭秘 - 品牌测评鉴赏家
  • igbt模块的栅极驱动芯片,栅极电阻计算
  • 构建高准确率、可控、符合规范的政务数据库审计和监测方案
  • TK: 计算三角形的面积
  • SAT 辅导机构怎么选?2025 年高性价比机构测评指南(附避坑攻略) - 品牌测评鉴赏家
  • SAT 辅导机构怎么选?2025 年高性价比机构测评与避坑指南(附收费标准与选课攻略) - 品牌测评鉴赏家
  • 2025年铁路地铁电力电缆生产厂家推荐:中低压、低压、中压、变频、聚乙烯绝缘电缆厂家精选指南 - 品牌2026
  • 2025电缆品牌精选:中国电缆一线品牌推荐及十大知名品牌推荐 - 品牌2026
  • langchain4j 学习系列(7)-文本分类
  • 实用指南:OCR与AI赋能医药资质审核的全流程自动化方案
  • Spark的运行架构,RDD自带容错机制分析 - f
  • 解码多态、虚函数——动态行为扩展
  • 2025托福培训机构选择指南:精准匹配你的提分需求
  • 2025托福辅导机构优选指南:从口碑到提分的全方位攻略
  • 使用VSCode开发ESP32单片机基于MicroPython-12.8
  • 过碳酸钠选购指南:优质厂家推荐及欧盟标准供应商盘点
  • DBLens 连接数怎么限制?免费 3 个,订阅随便加
  • 轮询相关算法
  • 数据仓库和数据集市之ODS、CDM、ADS、DWD、DWS - 教程
  • 托福备考黄金期,如何精准锁定高性价比机构?
  • 2025年12月广州番禺佛山网站建设,营销网站建设,网站建设推广公司品牌推荐,定制能力与交付效率三维测评
  • 2025托福培训机构怎么选?6大高性价比机构测评+避坑指南
  • 2025雅思一对一机构推荐排行榜:精准提分攻略,考研必看!
  • 2025年12月深圳公装装修公司最新推荐:深圳办公室装修设计、深圳酒店装修设计、深圳展厅装修设计、深圳写字楼装修设计、深圳厂房装修设计、深圳公寓装修设计、八匹马装饰成企业优选
  • 12月8日总结 - 作业----