MnZn求助!(RE)
查看原帖
MnZn求助!(RE)
703115
d909RCA楼主2023/9/24 22:15

rt

/*
ID: Sean du [duyu9092]
TASK: test
LANG: C++
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,s,len=1,top=1,stk[1000009],f[1000009],a[1000009],b[1000009],lc[1000009],rc[1000009];
bool v[1000009];
void bfs()
{
	int x;
	stk[1]=1;
	while(top>0)
	{
		x=stk[top];
		if(lc[x]&&!v[lc[x]])
		{
			stk[++top]=lc[x];
			continue ;
		}
		b[++s]=a[x];
		b[s]-=s;
		v[x]=1;
		top--;
		if(rc[x]&&!v[rc[x]])
		{
			stk[++top]=rc[x];
			continue ;
		}
	}
}
signed main()
{
// 	ofstream fout ("test.out");
//  ifstream fin ("test.in");
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=2;i<=n;i++)
	{
		int prt,d;
		cin>>prt>>d;
		if(d) rc[prt]=i;
		else lc[prt]=i;
	}
	bfs();
	f[1]=b[1];
	for(int i=2;i<=n;i++)
	{
		if(b[i]>=f[len]) f[++len]=b[i];
		else
		{
			int l=1,r=len;
			while(l<=r)
			{
				int mid=l+r<<1;
				if(f[mid]<=b[i]) l=mid+1;
				else r=mid-1;
			}
			f[l]=b[i];
		}
	}
	cout<<n-len<<endl;
	return 0;
}
2023/9/24 22:15
加载中...