题目描述

John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们把这些工作称为完成本项工作的准备工作。至少有一项杂务不要求有准备工作,这个可以最早着手完成的工作,标记为杂务11。John有需要完成的nn个杂务的清单,并且这份清单是有一定顺序的,杂务k(k>1)k(k>1)的准备工作只可能在杂务11至k-1k−1中。

写一个程序从11到nn读入每个杂务的工作说明。计算出所有杂务都被完成的最短时间。当然互相没有关系的杂务可以同时工作,并且,你可以假定John的农场有足够多的工人来同时完成任意多项任务。

输入输出格式

输入格式:

第1行:一个整数nn,必须完成的杂务的数目(3 \le n \le 10,0003≤n≤10,000);

第22至(n+1)(n+1)行: 共有nn行,每行有一些用11个空格隔开的整数,分别表示:

* 工作序号(11至nn,在输入文件中是有序的);

* 完成工作所需要的时间len(1 \le len \le 100)len(1≤len≤100);

* 一些必须完成的准备工作,总数不超过100100个,由一个数字00结束。有些杂务没有需要准备的工作只描述一个单独的00,整个输入文件中不会出现多余的空格。

输出格式:

一个整数,表示完成所有杂务所需的最短时间。

输入输出样例

输入样例#1: 复制

7
1 5 0
2 2 1 0
3 3 2 0
4 6 1 0
5 1 2 4 0
6 8 2 4 0
7 4 3 5 6 0

输出样例#1: 复制

23

以时间为序的拓扑排序  要注意的是答案并不一定是最后一次更新

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//
#define inf 0x3f3f3f3fconst int N=10000;struct node
{int id,t;node(){}node(int a,int b):id(a),t(b){}bool operator < (const node& rhs)const{return t>rhs.t;}
}s[N];int dis[N];
int in[N];
vector<int>edge[N];
int main()
{int n;RI(n);rep(i,1,n){RII(s[i].id,s[i].t);dis[i]=s[i].t;int x;while(RI(x),x){in[i]++;edge[x].pb(i);}}priority_queue<node>q;rep(i,1,n)if(!in[i])q.push(node(s[i].id,s[i].t) );int ans=0;while(!q.empty()){node u=q.top();q.pop();int id=u.id,t=u.t;if(edge[id].size())rep(i,0,edge[id].size()-1){int v=edge[id][i];if(--in[v]==0){s[v].t+=t;ans=max(ans,s[v].t);q.push(node(v,s[v].t));}}}cout<<ans;return 0;
}

View Code

转载于:https://www.cnblogs.com/bxd123/p/10788511.html

P1113 杂务 拓扑排序相关推荐

  1. 洛谷P1113 杂务(DP,拓扑排序)

    [题目描述] John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的, ...

  2. 拓扑排序-信息学奥赛

    拓扑排序 制作人:(CwinSpider) 文章目录 拓扑排序 一.前置知识 二.知识讲解 1. 什么是拓扑排序? 2. 拓扑排序的实现 3. 拓扑排序的应用 4. 拓扑排序的复杂度分析 三.课堂练习 ...

  3. 图论---拓扑排序的应用

    最近研究了几道图论的题目,都是图论入门的算法,用的比较多的就是拓扑排序,多用于有着先后顺序的题目,也可以用来判断环,做个小总结. 杂物 题目链接:杂务 - 洛谷 这一题需要计算最短的时间,利用了记忆化 ...

  4. 图论--DAG与拓扑排序

    拓扑排序概念 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序: 每个顶点出现且只出现一次: 若A 在序列中排在B 的前面,则在图中不存在从B 到 A的路径 ...

  5. 【图论】有向无环图的拓扑排序

    1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...

  6. C#实现有向无环图(DAG)拓扑排序

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...

  7. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  8. usaco frame up(所有拓扑排序的输出)

    先根据图建图再拓扑排序. /** ID: jinbo wu TASK: frameup LANG:C++ */ #include<bits/stdc++.h> using namespac ...

  9. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  10. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)

    目录 一.概述 例1: 例2: 代码: 二.实例 1.有向图的邻接表(拓扑排序) 2.有向网图的邻接表 3.树的孩子表示 一.概述 二级指针:指向指针的指针.一般需要修改地址的时候会用到二级指针. 注 ...

最新文章

  1. restapi如何传图片_iPhone传照片,不是只能用微信QQ,第二种方法很少人知道哦
  2. 辅助域控如何抢占角色(主域控已经down机不可恢复了)
  3. linux之文本比较工具
  4. php中$sum,如何在PHP中显示SUM列
  5. 面向过程的ado建造者模式
  6. Java EE,Docker和Maven(技术提示#89)
  7. nacos启动_nacos微服务注册中心
  8. error: Pulling is not possible because you have unmerged files
  9. android webview js交互 第一节 (java和js交互)
  10. zabbix3.2学习笔记(四):设置sendEmail告警动作
  11. 11月20日站立会议
  12. 原生js实现图片爆炸效果,图片轮播
  13. Android开放root权限
  14. 单片机---HLK-W801移植Nes模拟器(二)
  15. html在搜索栏中加入放大镜,CSS3 搜索条动画(放大镜图标展开为长方形输入框)...
  16. 面向对象系列(二)-封装,继承,多态
  17. java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
  18. java xmx xms xmn_JVM调优 -Xms -Xmx -Xmn -Xss
  19. kafka系列(4)- kafka集群操作
  20. 自动生成sitemap地图PHP代码

热门文章

  1. 【笔记】Yale博弈论第一课
  2. asp.net中FCKeditor的调用(31)
  3. oracle ora-22992,ORACLE ORA--22992:无法使用远程表选择的LOB定位器,database link
  4. centos nginx php5.3,centos6.2+nginx-1.2.3+php-5.3.17装配脚本
  5. 如何删除mysql软链接,Linux中移除(删除)符号链接的命令
  6. transform与rigibody以及角色控制器的运动
  7. html5鼠标载入弹出信息框,js实现自定义弹出对话框(弹窗)可拖拽
  8. vscodehtml环境配置_从零开始配置 vscode
  9. python 连接hive_python pyhive通过SSH隧道连接hive报错,求解
  10. delphi中webbrowse控件中模拟点击文本超链接_游戏中lt;控件gt;的思考