【HDU6667】Roundgod and Milk Tea【贪心】

题目大意:给你ai,bi,限制ai不能流向bi,求最大流
题解:贪心,对于第i个班级,考虑前i-1个班级匹配完剩余多少a,b,将这些ab对第i个班级进行贪心匹配
匹配完若第i个班级还有剩余的ab,考虑将前面的已匹配拆分
考虑如何拆分
若存在a1-b2这样一个匹配,那么可以将它拆开,并与aibi匹配成a1-bi,ai-b2,这样答案就多了1
于是可以想到每新贪心一个班级时,先用cnta和cntb进行贪心,若剩余ab,则在前面找已匹配进行拆分重新匹配使得答案增加
时间复杂度o(n)
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int T,n;
struct node
{
ll a,b;
}c[];
ll ans,cnta,cntb,tc;
ll ta[],tb[];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%lld%lld",&c[i].a,&c[i].b);
cnta=cntb=ans=;int ka=,kb=;
ll tta,ttb;
for(int i=;i<=n;i++)
{
//printf("%d %lld %lld\n",i,cnta,cntb);
tta=c[i].a;ttb=c[i].b;
if(cnta>=c[i].b)cnta-=c[i].b,ans+=c[i].b,c[i].b=;
else c[i].b-=cnta,ans+=cnta,cnta=;
if(cntb>=c[i].a)cntb-=c[i].a,ans+=c[i].a,c[i].a=;
else c[i].a-=cntb,ans+=cntb,cntb=;
tc=min(c[i].a,c[i].b);
while(tc && ka<i)
{
if(ta[ka]>=tc)ans+=tc,c[i].a-=tc,c[i].b-=tc,ta[ka]-=tc,tc=;
else ans+=ta[ka],c[i].a-=ta[ka],c[i].b-=ta[ka],tc-=ta[ka],ka++;
}
while(tc && kb<i)
{
if(tb[kb]>=tc)ans+=tc,c[i].a-=tc,c[i].b-=tc,tb[kb]-=tc,tc=;
else ans+=tb[kb],c[i].a-=tb[kb],c[i].b-=tb[kb],tc-=tb[kb],kb++;
}
ta[i]=tta-c[i].a;tb[i]=ttb-c[i].b;
cnta+=c[i].a;cntb+=c[i].b;
//printf("%d %lld %lld %lld\n",i,cnta,cntb,ans);
}
//printf("%lld %lld %lld\n",cnta,cntb,ans); printf("%lld\n",ans);
}
return ;
}
心得:对贪心还不太会,还要继续努力
【HDU6667】Roundgod and Milk Tea【贪心】的更多相关文章
- [2019杭电多校第八场][hdu6667]Roundgod and Milk Tea
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题目大意是说n个班级,每个班级有ai人和bi杯茶,每个人只能喝其他班的茶并且只能喝一杯.问最多有 ...
- HDU 6667 Roundgod and Milk Tea (思维)
2019 杭电多校 8 1011 题目链接:HDU 6667 比赛链接:2019 Multi-University Training Contest 8 Problem Description Rou ...
- hdu多校第八场 1011 (hdu6667) Roundgod and Milk Tea 二分图匹配
题意: 有若干个班,每个班有些人要喝奶茶,也提供一些奶茶,一人喝一杯,但是自己班的人不能喝自己班的奶茶,求最多能有多少人喝上奶茶. 题解: 典型的二分图匹配问题,学生在左,奶茶在右,学生和非自己班的奶 ...
- 喝奶茶最大值(不能喝自己班级的)2019 Multi-University Training Contest 8--hdu杭电第8场(Roundgod and Milk Tea)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题意: 有 n个班级,每个班级有a个人.b个奶茶,每个班的人不能喝自己的奶茶,只能喝别人班的奶茶 ...
- HDU 6667 Roundgod and Milk Tea
hdu题面 Time limit 6000 ms Memory limit 131072 kB OS Windows Source 2019 Multi-University Training Con ...
- 【HDOJ6667】Roundgod and Milk Tea(模拟)
题意:有n个班级,每个班级有a[i]个人,b[i]杯奶茶 每个人至多喝一杯奶茶,且不能喝自己班的 问能喝到奶茶的最多总人数 n<=1e6,a[i],b[i]<=1e9 思路: 做法一: # ...
- HDOJ.1070 Milk(贪心)
Milk 点我挑战题目 题意分析 每组测试数据给出一系列牛奶商品,分别是牛奶的品牌,价格,以及体积.在读取数据的时候,体积在200以下的牛奶直接忽略掉.并且每天要喝200ML的牛奶.但是无论牛奶体积有 ...
- 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此 ...
- 洛谷P1208——P1208 [USACO1.3]Mixing Milk(贪心)
题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是 ...
随机推荐
- javascript 数据类型之数值转换
数值转换 一.有3个函数可以把非数值转换为数值: Number() parse Int() parse Float() 说明: 1.Number()可以用于任何数据类型,强转类型,如果不能把指转成数值 ...
- springboot笔记-thymeleaf
简介:Thymeleaf 是⾯向 Web 和独⽴环境的现代服务器端 Java 模板引擎,能够处理 HTML.XML.JavaScript.CSS 甚至纯文本.Thymeleaf 的作用域在 HTML ...
- python基础之迭代器生成装饰器
基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元 ...
- javascript异步延时加载及判断是否已加载js/css文件
<html> <head> <script type="text/javascript"> /**======================= ...
- 对Elastic集群内部配置TLS加密通信及身份验证
1.介绍 官方宣布从6.8和7.1开始,免费提供多项安全功能.其中包括tls加密通信,基于角色访问控制等功能. 可以使用企业CA证书来完成这一步骤,但是一般情况下,我们可以通过elasticsearc ...
- github项目多人进行合作开发,填坑记录
1.Fork别人的github项目. Fork项目成功后,再进行把项目克隆到你本地.(我的项目已经克隆到本地了,右边是克隆下来的所有文件,除了 node_modules) git命令: git clo ...
- JSP的9大内置对象和4打作用域对象
一.9大内置对象 二.4大内置作用域对象
- 完整的JavaScript包括三部分、script标签、JavaScript的基本语法以及变量和字面量的关系
完整的JavaScript包括三大部分: -ECMAScript JavaScript的开发规范:提供核心语言功能 -DOM document object model 文档对象模型:提供 ...
- Intellij IDEA 最全实用快捷键整理
正文前: 1. IDEA内存优化(秒开的快感!!) 因机器本身的配置而配置: \IntelliJ IDEA8\bin\idea.exe.vmoptions // (根据你的配置变大!!) ------ ...
- Delphi 循环语句和程序的循环结构