首页 > 其他分享 >洛谷 P1113 杂务(拓扑排序,递归)

洛谷 P1113 杂务(拓扑排序,递归)

时间:2022-12-12 19:36:59浏览次数:37  
标签:P1113 dist 杂务 int 任务 poiwei MAXN 洛谷 indeg


题目大意:

有一个有向无圈图,每个节点看作一个任务,一个任务需要完成必须先完成父亲节点的任务,每个任务都有耗时。假设现在所有不相关任务都可以并行执行,问最短多少时间可以把所有任务完成。

解题思路:

首先,注意题目中比较坑的点。这里必须是完成所有父亲任务才能完成本个任务,所以某个任务的执行时间是

洛谷 P1113 杂务(拓扑排序,递归)_i++

其中par为i的父亲。

有这个递推后,我们就要知道怎么完成这个递推,很明显我们这里要按照拓扑排序的方法访问所有节点,因为要更新本个节点的话必须更新它所有的父亲节点,这里用kahn算法。它本质上是一个修改的BFS,首先让所有入度为0点进入队列,然后删掉出度的边,这时候让入度为0的点入队列的BFS。

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e4+10;
int indeg[MAXN];
int poiwei[MAXN];
int dist[MAXN];
vector<vector<int>> gra(MAXN);
vector<vector<int>> backgra(MAXN);
int main(){
memset(indeg,0,sizeof(indeg));
int n;cin>>n;
queue<int> q;
for(int i=0;i<n;i++){
int u,time;cin>>u>>time;u-=1;
poiwei[u]=time;
int t;
while(cin>>t && t){
t-=1;
indeg[u]++;
gra[t].emplace_back(u);
backgra[u].emplace_back(t);
}
if(!indeg[u])q.push(u);
}
while(!q.empty()){
int u=q.front();q.pop();
dist[u]=poiwei[u];
for(int i=0;i<(int)backgra[u].size();i++){
int bnx=backgra[u][i];
dist[u]=max(dist[u],dist[bnx]+poiwei[u]);
}
for(int i=0;i<(int)gra[u].size();i++){
int nx=gra[u][i];
indeg[nx]--;
if(!indeg[nx])q.push(nx);
}
}
int ans=-1;
for(int i=0;i<n;i++){
ans=max(ans,dist[i]);
}
cout<<ans<<endl;
return 0;
}

 

标签:P1113,dist,杂务,int,任务,poiwei,MAXN,洛谷,indeg
From: https://blog.51cto.com/u_15910522/5931532

相关文章

  • 洛谷 P1996 约瑟夫问题
    问题简介:小朋友围城一圈,从1号开始报数,报到M的那位同学出局,然后下一位同学报1,循环上述过程直到所有同学出局。输出依次出局的小朋友的号码解题思路:没什么好说的,就是模拟,出局......
  • 洛谷 P1233 木棍加工(贪心,递增子串DP)
    题目大意:有矩形A1,A2......An.每个矩形有长宽w,h。现在已知cost:(1)若矩形a的w,h小于矩形b的w,h,那么没有cost(2)其它情况cost+1.现在已知矩形A1,A2...,问怎么得到最少cost.解题思......
  • 洛谷 P1057 传球游戏(背包DP)
    题目大意:有n个人围成一圈,每个人可以把手上的球传给左边或者右边,现在小明开始传球,问m次后,把球传回给自己的次数。解题思路:考虑DP,使用带记忆的DP, 首先我们的状态可以设为[还......
  • 洛谷 P5143 攀爬者 题解
    原题链接P5143攀爬者解析内心OS第一眼看上去:他**滴,这么离谱的公式,这还是正常的橙题吗?1分钟后······这么简单的题,还好意思当橙题?(请忽略上方内容)......
  • 「题解」洛谷 P8850 [JRKSJ R5] Jalapeno and Garlic
    2022.12upd:原先代码锅了,重写了一份。看上去是比较常规的题,应当需要更灵敏的直觉和更快的速度解决这道题。首先考虑若已经确定一个\(x\),那么贪心修改策略就是随便找一个......
  • 「题解」洛谷 P8848 [JRKSJ R5] 1-1 B
    首先不考虑只有\(1\)或者只有\(-1\)的平凡情况。令\(z\)为\(1\)的个数,\(f\)为\(-1\)的个数,若有\(f\geqz\),那么可以构造使得最大子段和为\(1\)(因为有\(1\)......
  • 洛谷 P1786 帮贡排序 题解
    原题链接P1786帮贡排序解析实现方法一看题:这不就是道排序吗?但是——用啥办法呢?这自带的排序方法,肯定是不能用了那么我们就来写一个cmp排序函数吧!但是——输出排......
  • 题解 洛谷 P2885 [USACO07NOV]Telephone Wire G
    1.题面描述题目链接给出\(n\)棵树的高度。你可以进行任意次操作,每次操作形如:把某棵树增高\(x\),代价为\(x^2\)(注意:不能将一棵树的高度减少)。在操作完之后,一个状态......
  • 题解 洛谷 P3594 [POI2015] WIL
    1.题面描述题目链接给定一个长度为\(n\)的序列,你有一次机会选中一段连续的长度不超过\(d\)的区间,将里面所有数字全部修改为\(0\)。请找到最长的一段连续区间,使得该......
  • 题解 洛谷 P3793 由乃救爷爷
    1.题面描述题目链接给定长为\(n\)的序列,\(m\)次询问,查询区间最大值。\(n,m\le10^7\),数据随机。2.分析经典的静态区间最小值问题,经典题目配经典算法,考虑到ST表......