洛谷 P1113 杂务

Description

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

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

Input

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

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

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

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

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

Output

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

Sample Input

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

Sample output

23

题解:

  • 一道简单的DAG
  • 用拓扑转换为DAG然后dp即可
#include <iostream>
#include <cstdio>
#include <queue>
#define maxn 50005
using namespace std;struct E {int next, to;} e[maxn * 100], edge[maxn * 100];
int n, num, cnt, num_edge, ans;
int a[maxn], h[maxn], in[maxn], seq[maxn], dp[maxn], head[maxn];void add(int u, int v)
{e[++num].next = h[u];e[num].to = v;h[u] = num;
} void add_edge(int from, int to)
{edge[++num_edge].next = head[from];edge[num_edge].to = to;head[from] = num_edge;
}void topsort()
{queue<int> que;for(int i = 1; i <= n; i++)if(!in[i]) que.push(i);while(!que.empty()){int now = que.front();seq[++cnt] = now; que.pop();for(int i = h[now]; i != 0; i = e[i].next){in[e[i].to]--;if(!in[e[i].to]) que.push(e[i].to);}}
}int main()
{cin >> n;for(int i = 1; i <= n; i++){int t;  cin >> t >> t;a[i] = t;while(1){cin >> t;if(!t) break;add(t, i), in[i]++;add_edge(i, t);}}topsort();for(int i = 1; i <= n; i++){int x = seq[i];for(int j = head[x]; j != 0; j = edge[j].next)dp[x] = max(dp[x], dp[edge[j].to]);dp[x] += a[x], ans = max(ans, dp[x]);}cout << ans;return 0;
}

转载于:https://www.cnblogs.com/BigYellowDog/p/11180805.html

洛谷 P1113 杂务相关推荐

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

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

  2. 拓扑排序——杂物(洛谷 P1113)

    题目选自洛谷P1113 把每个任务看作一个结点,如果两个任务x和y满足x是y的准备工作,那么在x和y之间连一条有向边. 由于互相没有关系的杂物可以同时工作,所以可以发现所有杂物都被完成的最短时间只取决 ...

  3. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  4. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  5. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  6. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  7. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  8. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  9. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  10. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

最新文章

  1. git ssh key创建和github使用
  2. http传输html图片方式,http怎么样传输图片?二进制流还是base64编码
  3. mysql 虚拟环境搭建_pycharm虚拟环境virtualnv安装MySQL扩展
  4. [原创]Pubwin2007服务器安全测试工具(防范Pubwin收银伴侣之类的软件)
  5. 给FreeBSD加上了防火墙
  6. Html 教程 (10)分组标签div 和span
  7. vue + element 顶部二级菜单_揭秘vue/react组件库中5个quot;作者不造的轮子quot;
  8. WPF实现截屏(仿微信)
  9. wps图表xy轴颠倒_用EXCEL来搞艺术之图表类型变换
  10. 硬件故障-笔记本电脑开不了机故障处理
  11. Mysql 解决emoji表情处理问题 - Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column
  12. 797. 差分(有图解)
  13. Fibonacci斐波拉契数列----------动态规划DP
  14. jsf集成spring_Spring JSF集成
  15. 归并排序的时间复杂度
  16. atitit.编辑表单的实现最佳实践dwr jq easyui
  17. 金九银十面试季,字节跳动面试题拿走不谢(附详细答案解析)
  18. springboot基于微信小程序的驾校驾驶证报名练车预约小程序 uinapp 计算机毕业设计
  19. 心理很难受,无法平静!
  20. 对象上下文语义分割:OCR论文笔记(Object-Contextual Representations for Semantic Segmentation )

热门文章

  1. Java 正则表达式处理复杂文本,效率就是高!
  2. Java 堆和栈的区别,还傻傻分不清?
  3. 拼多多的硬核逆生长!
  4. 速进,双十一内购通道!
  5. 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」
  6. 5个导致主线程卡顿较鲜为人知的元凶
  7. 高并发架构系列:Redis并发竞争key的解决方案详解
  8. 从零开始学Vue(一)—— Vue.js 入门
  9. Nginx configure
  10. Android mainfests手记