【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乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是 ...
随机推荐
- python 爬取百度url
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-29 18:38:23 # @Author : EnderZhou (z ...
- [转帖]linux文件描述符文件/etc/security/limits.conf
linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习 ...
- Python流程控制与while 循环(day01)
一:流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断哪条叉路是你真正要走的路,如果我们想让 ...
- yii框架RBAC權限管理
基于角色的存取控制 (RBAC) 基于角色的存取控制 (RBAC) 提供了一个简单而强大的集中式存取控制机制. 详细的关于 RBAC 和诸多传统的存取控制方案对比的详情,请参阅 Wikipedia. ...
- Maven出错的问题处理
1:使用Maven部署dubbox.jar包到maven本地仓库 由于Dubbox的jar包并没有部署到Maven的中央仓库中,大家在Maven的中央仓库中可以查找到Dubbo的最终版本是2.5.3 ...
- 如何减少程序间的耦合度?_DI与接口
spring 开发提倡接口编程,配合DI技术可以更好的减少层(程序)与层(程序)之间的解耦合例子说明: 任务:要求: 1.打印机依赖纸张和墨盒 2.纸张有A4和B5两种 ...
- IDEA一些有用的功能
使用 Type Info 如果你想要更多的关于符号的信息,例如从哪里或它的类型是什么, 快速文档可以很好的帮到您,您可以按下 Ctrl+Q 来调用它,然后你会看到一个包含这些细节的弹出窗口.如果您不需 ...
- asp.net运行原理及机制
当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模 ...
- 12.AutoMapper 之Null替换(NullSubstitution)
https://www.jianshu.com/p/3f86f237d1db Null 替换(Null Substitution) Null 替换允许当源类型成员在成员链任何位置为Null时给目标成员 ...
- CSA Lignts Out
csa 算是热身题吧 如果是每次操作一行或一列,那么无论怎么操作,本质不同的行最多只有两种,本质不同的列也最多只有两种,那么只要把某一种行和某一种列全部翻转使得全为0即可 现在是同时操作一行一列,显然 ...