求助
  • 板块P1113 杂务
  • 楼主zfy2006
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/1/21 18:54
  • 上次更新2023/10/28 11:38:27
查看原帖
求助
574890
zfy2006楼主2022/1/21 18:54
#include<bits/stdc++.h>
using namespace std;
long long n,head=0,tail=0,ti=0,x;
struct o{
	long long len,num,t;//len自己的时间 t总时间 num有几个前置工作 
	vector<long long>nxt; //后面哪几个的前置工作 
}a[10005];
queue<o>q;
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		a[i].num=0;
		int y;
		cin>>y>>x;
		a[i].len=x;
		a[i].t=a[i].len;
		while(cin>>x){
			if(x==0) break;
			a[x].nxt.push_back(i);
			a[i].num++;
		}
		if(a[i].num==0){
			q.push(a[i]);
			tail++;
		}
	}
	
	while(!q.empty()){
		o f=q.front();
		for(int i=0;i<f.nxt.size();i++){
			a[f.nxt[i]].t=max(a[f.nxt[i]].t,a[f.nxt[i]].len+f.t);
			a[f.nxt[i]].num--;
			ti=max(ti,a[f.nxt[i]].t);
			if(a[f.nxt[i]].num==0){
				q.push(a[f.nxt[i]]);
			}
			
		}
		q.pop();
	}
	cout<<ti<<endl;
	for(int i=0;i<n;i++) ti=max(ti,a[i].t);
	cout<<ti;
	return 0;
}
2022/1/21 18:54
加载中...