P3074 [USACO13FEB]牛奶调度Milk Scheduling
题目描述
Farmer John's N cows (1 <= N <= 10,000) are conveniently numbered 1..N. Each cow i takes T(i) units of time to milk. Unfortunately, some cows must be milked before others, owing to the layout of FJ's barn. If cow A must be milked before cow B, then FJ needs to completely finish milking A before he can start milking B.
In order to milk his cows as quickly as possible, FJ has hired a large number of farmhands to help with the task -- enough to milk any number of cows at the same time. However, even though cows can be milked at the same time, there is a limit to how quickly the entire process can proceed due to the constraints requiring certain cows to be milked before others. Please help FJ compute the minimum total time the milking process must take.
农民约翰有N头奶牛(1<=N<=10,000),编号为1...N。每一头奶牛需要T(i)单位的时间来挤奶。不幸的是,由于FJ的仓库布局,一些奶牛要在别的牛之前挤奶。比如说,如果奶牛A必须在奶牛B前挤奶,FJ就需要在给奶牛B挤奶前结束给奶牛A的挤奶。
为了尽量完成挤奶任务,FJ聘请了一大批雇工协助任务——同一时刻足够去给任意数量的奶牛挤奶。然而,尽管奶牛可以同时挤奶,但仍需要满足以上的挤奶先后顺序。请帮助FJ计算挤奶过程中的最小总时间。
输入输出格式
输入格式:
* Line 1: Two space-separated integers: N (the number of cows)
and M (the number of milking constraints; 1 <= M <= 50,000).
* Lines 2..1+N: Line i+1 contains the value of T(i) (1 <= T(i) <= 100,000).
* Lines 2+N..1+N+M: Each line contains two space-separated integers A
and B, indicating that cow A must be fully milked before one can start
milking cow B. These constraints will never form a cycle, so a solution
is always possible.
输出格式:
* Line 1: The minimum amount of time required to milk all cows.
输入输出样例
3 1
10
5
6
3 2
11
说明
There are 3 cows. The time required to milk each cow is 10, 5, and 6, respectively. Cow 3 must be fully milked before we can start milking cow 2.
Cows 1 and 3 can initially be milked at the same time. When cow 3 is finished with milking, cow 2 can then begin. All cows are finished milking after 11 units of time have elapsed.
Solution:
解释一手题意:本题就是一棵树(或者森林)中,从每个rd为0的点来走一条路径(需要时间),输出最长的时间。
本题描述中有一句话很重要(直接得出算法):"若b在a前面,则b必须先挤奶,再去给a挤奶"。
于是就有了上面的一句话题意,一个根节点要在它的多个儿子节点前被访问,然后找出它到各儿子节点的最长的时间,就是访问该树的最少时间。(画个图自己理解吧,语文太差,描述不好)
于是想到拓扑排序。于是直接统计入度,在拓扑排序时加两条语句维护每条路径的最长时间就OK了。
代码:
#include<bits/stdc++.h>
#define il inline
#define ll long long
using namespace std;
const int N=,M=;
int n,m,ans,t[N],a[N],cost[N],cnt,to[M],net[M],h[N],rd[N];
il void add(int x,int y)
{
to[++cnt]=y,net[cnt]=h[x],h[x]=cnt,rd[y]++;
}
il int gi()
{
int a=;char x=getchar();bool f=;
while((x<''||x>'')&&x!='-')x=getchar();
if(x=='-')x=getchar(),f=;
while(x>=''&&x<='')a=a*+x-,x=getchar();
return f?-a:a;
}
il void topsort()
{
queue<int>q;
for(int i=;i<=n;i++)
if(!rd[i])q.push(i);
while(!q.empty()){
int x=q.front();q.pop();
cost[x]=a[x]+t[x];
ans=max(ans,cost[x]);
for(int i=h[x];i;i=net[i]){
rd[to[i]]--;
a[to[i]]=max(a[to[i]],cost[x]);
if(!rd[to[i]])q.push(to[i]);
}
}
}
int main()
{
n=gi(),m=gi();
//cout<<n<<m<<endl;
for(int i=;i<=n;i++)t[i]=gi();
int u,v;
while(m--){
u=gi(),v=gi();
add(v,u);
}
topsort();
cout<<ans;
return ;
}
P3074 [USACO13FEB]牛奶调度Milk Scheduling的更多相关文章
- 洛谷P3093 [USACO13DEC]牛奶调度Milk Scheduling
题目描述 Farmer John has N cows that need to be milked (1 <= N <= 10,000), each of which takes onl ...
- [USACO13DEC]牛奶调度Milk Scheduling
原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4096 容易想到的一个测略就是,优先考虑结束时间小的牛.所以我们对所有牛按照结束时间排序.然 ...
- [USACO09OPEN] 工作调度Work Scheduling (贪心/堆)
[USACO09OPEN] 工作调度Work Scheduling 题意翻译 约翰有太多的工作要做.为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有10^ ...
- P1208 [USACO1.3]混合牛奶 Mixing Milk
P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...
- [洛谷P2852] [USACO06DEC]牛奶模式Milk Patterns
洛谷题目链接:[USACO06DEC]牛奶模式Milk Patterns 题目描述 Farmer John has noticed that the quality of milk given by ...
- 洛谷——P1208 [USACO1.3]混合牛奶 Mixing Milk
P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...
- 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling
P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...
- 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...
- 题解 P2949 【[USACO09OPEN]工作调度Work Scheduling】
P2949 [USACO09OPEN]工作调度Work Scheduling 题目标签是单调队列+dp,萌新太弱不会 明显的一道贪心题,考虑排序先做截止时间早的,但我们发现后面可能会出现价值更高却没有 ...
随机推荐
- 北京Uber优步司机奖励政策(2月28日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- [hdu 6184 Counting Stars(三元环计数)
hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C, ...
- C#防止程序重新运行
//禁止重复运行 bool ret; Mutex mutex = new Mutex(true, Application.ProductName, out ret); if (ret) { Appli ...
- 腾讯WeTest受邀参展2018谷歌开发者大会,Android 9专区免费开放
2018谷歌开发者大会(Google Developer Days)于9月20日正式在上海拉开帷幕.在今年,围绕谷歌最新研发技术,来自机器学习.物联网.云服务等各领域精英参会并进行了案例分享. 201 ...
- js函数相关高级用法
一.惰性载入函数(lazy function) 使用场景:当一个函数中的判断分支只用执行一次(第一次调用时执行),后续不会再变化,则可以使用惰性函数来提高性能. var addEvent = func ...
- WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注
1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...
- Objective-C description方法 SEL类型
description方法 #import "Person.h" @implementation Person - (void) setAge : (int) age { _age ...
- 用列主元消去法分别解方程组Ax=b,用MATLAB程序实现(最有效版)
数值分析里面经常会涉及到用MATLAB程序实现用列主元消去法分别解方程组Ax=b 具体的方法和代码以如下方程(3x3矩阵)为例进行说明: 用列主元消去法分别解方程组Ax=b,用MATLAB程序实现: ...
- Java应用基础微专业-工程篇
第1章-命令行 1.1 命令行基础 ls -a: list all files (including hidden files) .DS_Store: files detailed informati ...
- Vuejs 实现简易 todoList 功能 与 组件
todoList 结合之前 Vuejs 基础与语法 使用 v-model 双向绑定 input 输入内容与数据 data 使用 @click 和 methods 关联事件 使用 v-for 进行数据循 ...