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 0x3f3f3f3f const int N=; 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,,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,,n)
if(!in[i])
q.push(node(s[i].id,s[i].t) );
int ans=;
while(!q.empty())
{
node u=q.top();q.pop();
int id=u.id,t=u.t;
if(edge[id].size())
rep(i,,edge[id].size()-)
{
int v=edge[id][i]; if(--in[v]==)
{
s[v].t+=t;
ans=max(ans,s[v].t);
q.push(node(v,s[v].t));
}
}
}
cout<<ans; return ;
}
P1113 杂务 拓扑排序的更多相关文章
- Luogu P1113 杂务 【拓扑排序】 By cellur925
题目传送门 这题我们一看就知道是拓扑排序,然而在如何转化问题上花了大工夫,一个小时后最后还是无奈看了题解qwq. 显然我们可以对于每个任务,从他的前导任务到他连一条边,最后我们可以得到一个DAG.在这 ...
- P1113 杂务
P1113 杂务 题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务 ...
- 洛谷P1113 杂务
题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的,因为 ...
- NOIp2013 车站分级 【拓扑排序】By cellur925
题目传送门 我们注意到,题目中说:如果这趟车次停靠了火车站 x,则始发站.终点站之间所有级别大于等于火车站x的都必须停靠.有阶级关系,满满的拓扑排序氛围.但是,如果我们按大于等于的关系连,等于的情况就 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...
- 图——拓扑排序(uva10305)
John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...
随机推荐
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- Qt: 执行cmd命令;
QProcess p(NULL); p.setWorkingDirectory(szAppPath+"/database"); //指定工作路径,这个地方一定要设置: p.star ...
- HBase LSM树存储引擎详解
1.前提 讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎. B树存储引擎. LSM树(Log-Structured Merge Tree)存储引擎. 2. 哈希 ...
- charles抓包https设置
写在前面 https抓包的实现 (一)首先,电脑得装个证书 (二)然后,移动设备上安装证书 (三)最后,Charles添加SSL Proxying 写在前面 开发时,面对各种接口数据,绝大多数时间都会 ...
- java(12)字符串
一.字符串概述 1.1如何使用字符串 1)定义并初始化字符串 2)使用字符串,对字符串进行一些处理 1.2字符串的长度 语法: 字符串1.length(); -->返回字符串1的长度 publ ...
- vm—win7
- 题解 洛谷P3936 Coloring
考虑搜索,发现复杂度爆炸 贪心,正确性过低(~~实测爆炸~~) 于是,~~发现~~这题是模拟退火 这里不讲解退火的定义了,初学退火可以去平衡点 退火本身维护一个答案图像,答案的q,当前图 ...
- sonar6.7.2启动报错
sonar6.7.2启动报错:错误信息如下: es.log java.lang.RuntimeException: can not run elasticsearch as rootsonar.log ...
- kali中的webshell工具--webacoo
webacoo webshell其实就是放置在服务器上的一段代码 kali中生成webshell的工具 WeBaCoo(Web Backdoor Cookie) 特点及使用方法 类终端的shell 编 ...
- golang包管理工具glide安装
1:下载安装glide go get github.com/Masterminds/glide glide的源码以及exe文件在第一个gopath目录,如果不知道哪个是第一个gopath,echo一下 ...