[USACO]时间管理

作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的.

为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且必须在S_i或之前完成.现在是0时刻.约翰做一份工作必须直到做完才能停 止.

所有的商人都喜欢睡懒觉.请帮约翰计算他最迟什么时候开始工作,可以让所有工作按时完成.(如果无法完成全部任务,输出-1)

Finley

AOE网与AOV网

有向无环图(Directed Acycline Graph, DAG)是一类特殊的有向图。DAG有着广泛应用,AOE网和AOV网都是DAG的典型应用。

AOV网

AOV网(Activity On Vertex NetWork)用顶点表示活动,边表示活动(顶点)发生的先后关系。AOE网的边不设权值,若存在边<a,b>则表示活动a必须发生在活动b之前。

若网中所有活动均可以排出先后顺序(任两个活动之间均确定先后顺序),则称网是拓扑有序的,这个顺序称为网上一个全序。(详情参见离散数学/图论相关内容)。

在AOE网上建立全序的过程称为拓扑排序的过程,这个算法并不复杂:

  • 在网中选择一个入度为0的顶点输出
  • 在图中删除该顶点及所有以该顶点为尾的边
  • 重复上述过程,直至所有边均被输出。

若图中无入度为0的点未输出,则图中必有环。

程序源码:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

#define M 10001

int n, m, matrix[M][M], i, j;
int book, indegree[M]; //book 已排序的顶点个数

int main()

{

    int a, b, k;

    scanf("%d %d",&n, &m);
    //init
    for (i=1; i<=m; i++) {
        scanf("%d %d",&a, &b);
        matrix[a][b]=1;
        indegree[b]++;
    }

    for (i=1; i<=n; i++) {
        for (j=1; j<=n; j++) {
            if (indegree[j] == 0) { //遍历所有入度为0的顶点
               indegree[j] = -1;
               book++;
               for (k=1; k<=n; k++) {
                   if (matrix[j][k]==1) { //遍历所有入度为1的顶点
                      matrix[j][k]=0;     //remove edge e
                      indegree[k]--;       //update
                   }
               }
               break;
            }
        }
    }
    printf("%d\n", book);
    return 0;
}

AOE网

AOE网(Activity On Edge Network)是边表示活动的网,AOE网是带权有向无环图。边代表活动,顶点代表 所有指向它的边所代表的活动 均已完成 这一事件。由于整个工程只有一个起点和一个终点,网中只有一个入度为0的点(源点)和一个出度为0的点(汇点)。

相关时间的计算:

  • 事件最早发生时间:

即之前所有活动均完成所需的时间,由耗时最长的路径决定。

具体判断时可以在 直接前驱的最早发生时间 + 两者之间活动时间 组成的集合中寻找最大值。

  • 事件的最晚发生时间:

事件的最晚发生时间以不影响工程最终完成时间为原则。

源点(汇点)的最早发生时间和最晚发生时间相同。

对与事件j的最晚发生时间可以采用:汇点的发生时间减去到j的最长路径来求得。

  • 活动的最早开始时间:

活动的的开始时间与事件发生时间相互联系,活动的最早发生时间为其起点事件的最早发生时间。

  • 活动的最晚开始时间

活动的最晚开始时间为其终点的最晚开始时间减去活动进行的时间。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=1007;
 6 int n;
 7 struct Node{
 8   int st,en,ti;
 9 }node[maxn];
10 bool cmp(Node a,Node b){
11   return a.en<b.en;
12 }
13 int main(){
14   cin>>n;
15   for(int i=1;i<=n;i++){
16     cin>>node[i].ti>>node[i].en;
17     node[i].st=node[i].en-node[i].ti;
18   }
19   sort(node+1,node+n+1,cmp);
20   for(int i=n-1;i>=1;i--){
21     if(node[i].en>node[i+1].st){
22       node[i].en=node[i+1].st;
23       node[i].st=node[i].en-node[i].ti;
24     }
25   }
26   //for(int i=1;i<=n;i++) cout<<node[i].st<<" "<<node[i].en<<endl;
27   if(node[1].st<0) cout<<"-1"<<endl;
28   else cout<<node[1].st<<endl;
29   return 0;
30 }

原文地址:https://www.cnblogs.com/lcan/p/9692060.html

时间: 2024-10-11 05:59:55

[USACO]时间管理的相关文章

时间管理

时间是一种快速移动的资产,你所拥有的时间就是那么多.如何运用你所拥有的时间对于你的前程来说,将是至关重要的. 从许多方面来说,时间是你最宝贵的商品----浪费它的风险必须由你自己来承担. 每个人每周都有168个小时,或者每月大约有720个小时的时间.每个小时呢对于我们来说都是非常重要的. 今天我们要讨论的是时间管理,首先我们必须得明白什么是时间管理?时间管理总的来说就是运用策略和技术,帮助你尽可能有效的利用你的时间. 现在我们知道了什么是时间管理,那我们要怎么去做呢? 1.首先我们得想想我们的时

bzoj1620[Usaco2008 Nov]Time Management 时间管理*

bzoj1620[Usaco2008 Nov]Time Management 时间管理 题意: n个任务,每个有一个所需时间和最晚完成时刻,问最晚要从什么时候开始工作.n≤1000 题解: 贪心,按最晚完成时刻从早到晚排序,如果当前任务来不及完成,就将前面的任务往前推,否则累积一个“自由时间”.当推任务时,如果之前有“自由时间”,就用自由时间减往前推的时间,否则用最晚开始时间去减往前推的时间.反思:我开始贪错了,按最晚开始时刻从早到晚排序,结果WA很久.现在还是想不太清楚原因,希望哪位神犇能帮我

花10万学时间管理,还不如明白这两个字

1 A是个很勤奋的人,无论是工作.学习还是社交,都很忙很忙.他经常挂在嘴边的话便是时间不够用. 于是,他找了一大堆时间管理书籍,还报了培训班,研究啊研究,用了不知道多少工具,尝试了不知道多少种方法. 过了很长一段时间后,朋友们见他,他还是会说时间不够用啊不够用.生活状态还是跟以前一样,忙而乱,没成绩. 2 其实我们很多人都跟A一样,一旦发觉自己的时间不够用,效率低,可能首先考虑的就是学习时间管理,问各种工具方法. 然后发现,大部分努力成了然并卵,时间一过,还是老样子. 最近,我也在琢磨这个问题,

程序员们的时间管理法则

转自:http://www.csdn.net/article/2012-07-26/2807737 软件开发是非常令人兴奋的工作,经过多年的工作,你不仅可以得到相应的报酬(随着工作经验增长)还会有其他晋升的机会.大多数人只关心保持头浮出水面.但这并不是我们所要追求的目标,那仅仅是我们在学校或者孩童时代的梦想? 为了赚更多的钱,大多数人还会找额外的工作并且不太关注编程以外的东西.没有时间休息.没有时间和家人朋友小聚.除了工作还是工作.因此导致压力越来越大,对生活的不满足感油然而生. 其实我们只要稍

统筹高效利用时间——《小强升职记(升级版):时间管理故事书》读后感

      统筹高效利用时间 --<小强升职记(升级版):时间管理故事书>读后感 看完<小强升职记:时间管理故事书>,很有感触.书只是以小强为人物线索,通篇讲解如何管理.高效利用时间,和功利的升职等没有任何关系.全书着重讲如何利用时间,如"摔倒身上的猴子"等方法很受用.也想让媳妇和大家伙读一遍. 每天的忙碌,为什么有的人效率很高,有的人效率很低,同样的任务还要加班(这点我做的也不好).很大的原因往往是时间安排的不合理,分不清轻重缓急,没有目标,或者有目标容易

时间管理(uC/OS-II)

一.时钟节拍 uC/OS-II需要提供周期性信号源,用于实现时间延迟和确认超时.时钟节拍率越高,系统的额外负荷就越重.时钟节拍的实际频率取决于应用程序的精度.时钟节拍可以是专门的硬件定时器,也可以是来自50/60Hz交流电源信号. 注意:必须在多任务系统启动以后,即在调用OSStart()之后,再开启时钟节拍器.调用OSStart()之后应做的第一件事就是初始化定时器中断.通常容易犯的错误是将允许时钟节拍中断放在系统初始化函数OSInit()之后,在启动多任务OSStart()之前. uC/OS

为我所用--时间管理的价值

(一)时间管理概述 时间管理是根据自己的价值观和目标决定做不做某事.排定任务的优先级.何时做.做到什么程度的管理.时间管理首先就要求我们能够认识自我,清楚自己的价值观和最高目标--人们称之为人生使命.这个庞大的话题非三言两语所能说明,如果不想蹉跎,推荐通过阅读<小强升职记>开始自己的时间管理. 时间管理最重要的是自己掌控自己-掌控自己的方向.掌控自己的时间.掌控自己的脑袋,所以采用何种方式是次要的,起到管理的目的就好.时间管理的工具很多,存在着种种APP,有些有过度管理的倾向,大可不必纠结于采

【执行力决定命】第8集《时间管理,让工作和生活井井有条》

「音频原文」http://dwz.cn/6sB211 大家好,我是林琳笨,今天跟大家一起分享<时间管理,让工作和生活井井有条>,这个话题不但和工作有关系,也和生活关系也很大. 成功人士是事业有成,家庭照顾的很好,工作之余能陪家人过快乐的家庭生活,这不可能只是运气,也未必是他非常的努力,大部分原因是因为时间分配的很合理.所以有些企业基层及中层人员抱怨"我工作忙的连陪家里人的时间也没有了,家里人对我意见很大."这个时候需要反省,是不是自己在时间管理上出了问题. 所以说时间管理不

时间管理三要点

总结:文章讲述时间管理中需要时刻注意的三大要素. 这么多年到现在仍然一事无成的主要原因就是:想的太多,做的太少,或者叫做执行力太差.总结了下,想要做成点事必须要做到以下三点: 立即行动 do it now 不要想太多,不要说太多,不要列太多的要做事项,少说多做,马上去做,立刻去做.写到待办事项上的就必须马上做,并且快速完成.拖拖拉拉是做事的大敌. 专注 focus 人的精力有限,一天能完成的事情很少,一辈子能完成的事情更少,所以,要缩小要做的事,少而精,先精深后博大.十个百分之十不等于一个百分之