题目链接:http://118.190.20.162/view.page?gpid=T159
首先,第一种思路就是建立依赖链,但是这样必然会引起时间和存储超限,代码如下:
#include<bits/stdc++.h>//vector版,内存超限
using namespace std;
struct node{
int bianhao;
int dep;//依赖编号
int nd;//训练需要天数
int day1;//最早开始天数
int day2;//最晚开始天数
int deped=0;//是否被依赖,不唯一
};
vector<int> link[200];//放编号 ,无分支依赖链(倒着求)
struct node a[110];
int main()
{
int n,m;
bool flag=1;//能否完成
cin>>n>>m;
for(int i=1;i<=m;i++)//只依赖编号比自己小的node
{
cin>>a[i].dep;
a[a[i].dep].deped=1;
a[i].bianhao=i;
}
for(int i=1;i<=m;i++)
{
cin>>a[i].nd;
//初步判断能否完成
if(a[i].nd>n)flag=0;
//输出最早天数
if(!a[i].dep)
{
a[i].day1=1;
a[i].day2