[BZOJ2330][SCOI2011]糖果

2024-01-09 13:08
文章标签 糖果 bzoj2330 scoi2011

本文主要是介绍[BZOJ2330][SCOI2011]糖果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[SCOI2011]糖果

描述

幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

输入格式

输入的第一行是两个整数N,K。
接下来K行,表示这些点需要满足的关系,每行3个数字,X,A,B。
如果X=1, 表示第A个小朋友分到的糖果必须和第B个小朋友分到的糖果一样多;
如果X=2, 表示第A个小朋友分到的糖果必须少于第B个小朋友分到的糖果;
如果X=3, 表示第A个小朋友分到的糖果必须不少于第B个小朋友分到的糖果;
如果X=4, 表示第A个小朋友分到的糖果必须多于第B个小朋友分到的糖果;
如果X=5, 表示第A个小朋友分到的糖果必须不多于第B个小朋友分到的糖果;

输出格式

输出一行,表示lxhgww老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出-1。

输入

5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1

输出

11

备注

对于30%的数据,保证 N<=100
对于100%的数据,保证 N<=100000
对于所有的数据,保证 K<=100000,1<=X<=5,1<=A, B<=N

varw:array[0..500000,1..3]of longint;t:array[0..1000000]of longint;s,p,dist:array[0..100005]of longint;i,j,k:longint;n,m:longint;a,b,c,len,head,tail,tt,v:longint;ans:int64;
procedure init(a,b,c:longint);
beginw[len,1]:=b; w[len,2]:=c;if w[a,3]=0then w[a,3]:=len else w[w[a,1],3]:=len;w[a,1]:=len; inc(len);
end;beginreadln(n,m); len:=n+1;for i:=1 to m dobeginreadln(c,a,b);case c of1:begin init(a,b,0); init(b,a,0); end;2:begin if a=b then begin writeln(-1); halt; end; init(a,b,1); end;3:init(b,a,0);4:begin if a=b then begin writeln(-1); halt; end; init(b,a,1); end;5:init(a,b,0);end;end;for i:=1 to n dobegindist[i]:=1;p[i]:=1;s[i]:=1;t[i]:=i;end;head:=1; tail:=n+1;while head<tail dobeginv:=t[head]; tt:=w[v,3];while tt<>0 dobeginif dist[v]+w[tt,2]>dist[w[tt,1]]then begindist[w[tt,1]]:=dist[v]+w[tt,2];if p[w[tt,1]]=0 then begin s[w[tt,1]]:=s[v]+1; if s[w[tt,1]]>2*n then begin writeln(-1); halt; end;  p[w[tt,1]]:=1; t[tail]:=w[tt,1]; inc(tail); end;end;tt:=w[tt,3];end;inc(head); p[v]:=0;end;ans:=0;for i:=1 to n doinc(ans,dist[i]);writeln(ans);
end.

这篇关于[BZOJ2330][SCOI2011]糖果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587204

相关文章

【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

力扣135-分发糖果(java详细题解)

题目链接:135. 分发糖果 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。 题目思路: 本题主要就是难在,有俩个维度,当前的孩子不仅要跟左边比,还要跟右边比。 可能我们一开始就想遍历孩子,让当前孩子先跟左边

【NO.15】LeetCode经典150题-135. 分发糖果

文章目录 【NO.15】LeetCode经典150题-135. 分发糖果解题:贪心 【NO.15】LeetCode经典150题-135. 分发糖果 135. 分发糖果 【困难】 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。

代码随想录算法训练营第二十九天| 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列

134. 加油站 题目: 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证

贪心算法---分发糖果

题目: n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。 思路:使用两次贪心思想。 第一次从左到右遍历,只比较右边大于左边的情况,如果ratings[i]>ratings[i-1

九度OJ-1122:吃糖果

就是:N阶楼梯上楼问题。

代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

134. 加油站 题目链接:134. 加油站 文档讲解:代码随想录 状态:so easy 思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将下一个加油站设为新的起点,并重置当前油量差(currTank)。最后检查总的油量差(totalTank),如果总的油量差大于等于0,说明存在一个合法的起点,使汽车能绕完整个环形路;否则不存在

代码随想录算法训练营Day31| 134. 加油站 , 135. 分发糖果 ,860.柠檬水找零 , 406.根据身高重建队列

今天的题目真的写的我一肚子气,真的太气了,一道题都写不出来,再听完题解后,还是觉得没有完全理解,果然菜是原罪,我还是太弱了,继续加油吧!来看今天的第一题 134. 加油站:代码随想录 这道题目的意思就是说一个路上有n个加油站,你现在的初始状态下油是0,你可以选择从一个加油站开始,看你是否能绕路行驶一圈,这道题我想到了,将他所给的gas数组减去cost数组,然后来选,但是我不知道的是怎么来

Leetcode 135. 分发糖果(问题分解)

Leetcode 135. 分发糖果 根据描述,可知更多糖果发生在相邻两个孩子的rating更高者中,对于一个孩子来说,左右两侧都视为相邻,即ratings[ i ] > ratings[ i-1 ] 或 ratings[ i ] > ratings[ i+1 ]都会令糖果增加 由此则将问题分解成两个方面,分别考虑ratings大于左侧和ratings大于右侧两种情况 使用nums[ ] 记录

糖果(信息学奥赛一本通-T1299)

【题目描述】 由于在维护世界和平的事务中做出巨大贡献,Dzx被赠予糖果公司2010年5月23日当天无限量糖果免费优惠券。在这一天,Dzx可以从糖果公司的N件产品中任意选择若干件带回家享用。糖果公司的N件产品每件都包含数量不同的糖果。Dzx希望他选择的产品包含的糖果总数是K的整数倍,这样他才能平均地将糖果分给帮助他维护世界和平的伙伴们。当然,在满足这一条件的基础上,糖果总数越多越好。Dzx最多能带