P1113 杂务 拓扑排序
题目描述
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,整个输入文件中不会出现多余的空格。
输出格式:
一个整数,表示完成所有杂务所需的最短时间。
输入输出样例
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
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 杂务 拓扑排序相关推荐
- 洛谷P1113 杂务(DP,拓扑排序)
[题目描述] John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的, ...
- 拓扑排序-信息学奥赛
拓扑排序 制作人:(CwinSpider) 文章目录 拓扑排序 一.前置知识 二.知识讲解 1. 什么是拓扑排序? 2. 拓扑排序的实现 3. 拓扑排序的应用 4. 拓扑排序的复杂度分析 三.课堂练习 ...
- 图论---拓扑排序的应用
最近研究了几道图论的题目,都是图论入门的算法,用的比较多的就是拓扑排序,多用于有着先后顺序的题目,也可以用来判断环,做个小总结. 杂物 题目链接:杂务 - 洛谷 这一题需要计算最短的时间,利用了记忆化 ...
- 图论--DAG与拓扑排序
拓扑排序概念 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序: 每个顶点出现且只出现一次: 若A 在序列中排在B 的前面,则在图中不存在从B 到 A的路径 ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- usaco frame up(所有拓扑排序的输出)
先根据图建图再拓扑排序. /** ID: jinbo wu TASK: frameup LANG:C++ */ #include<bits/stdc++.h> using namespac ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)
目录 一.概述 例1: 例2: 代码: 二.实例 1.有向图的邻接表(拓扑排序) 2.有向网图的邻接表 3.树的孩子表示 一.概述 二级指针:指向指针的指针.一般需要修改地址的时候会用到二级指针. 注 ...
最新文章
- restapi如何传图片_iPhone传照片,不是只能用微信QQ,第二种方法很少人知道哦
- 辅助域控如何抢占角色(主域控已经down机不可恢复了)
- linux之文本比较工具
- php中$sum,如何在PHP中显示SUM列
- 面向过程的ado建造者模式
- Java EE,Docker和Maven(技术提示#89)
- nacos启动_nacos微服务注册中心
- error: Pulling is not possible because you have unmerged files
- android webview js交互 第一节 (java和js交互)
- zabbix3.2学习笔记(四):设置sendEmail告警动作
- 11月20日站立会议
- 原生js实现图片爆炸效果,图片轮播
- Android开放root权限
- 单片机---HLK-W801移植Nes模拟器(二)
- html在搜索栏中加入放大镜,CSS3 搜索条动画(放大镜图标展开为长方形输入框)...
- 面向对象系列(二)-封装,继承,多态
- java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
- java xmx xms xmn_JVM调优 -Xms -Xmx -Xmn -Xss
- kafka系列(4)- kafka集群操作
- 自动生成sitemap地图PHP代码
热门文章
- 【笔记】Yale博弈论第一课
- asp.net中FCKeditor的调用(31)
- oracle ora-22992,ORACLE ORA--22992:无法使用远程表选择的LOB定位器,database link
- centos nginx php5.3,centos6.2+nginx-1.2.3+php-5.3.17装配脚本
- 如何删除mysql软链接,Linux中移除(删除)符号链接的命令
- transform与rigibody以及角色控制器的运动
- html5鼠标载入弹出信息框,js实现自定义弹出对话框(弹窗)可拖拽
- vscodehtml环境配置_从零开始配置 vscode
- python 连接hive_python pyhive通过SSH隧道连接hive报错,求解
- delphi中webbrowse控件中模拟点击文本超链接_游戏中lt;控件gt;的思考