标签:its for dfs 二叉树 using c++ 遍历 org return
中序遍历+lis
#include<bits/stdc++.h> using namespace std; int n,len; int g[100005][3],a[100005],b[100005],w[100005]; bool v[100005]; inline void dfs(int x){ if(g[x][0]) dfs(g[x][0]); a[++len]=w[x]; if(g[x][1]) dfs(g[x][1]); } void lis(){ for(int i=1;i<=n;i++){ a[i]=a[i]-i; } len=1; b[1]=a[1]; for(int i=2;i<=n;i++){ if(b[len]<=a[i]) b[++len]=a[i]; else{ int x=lower_bound(b+1,b+len+1,a[i])-b; b[x]=a[i]; } } cout<<n-len; } int main(){ cin>>n; for(int i=1;i<=n;i++){ scanf("%d",&w[i]); } for(int i=2;i<=n;i++){ int fa,ch; scanf("%d%d",&fa,&ch); g[fa][ch]=i; } dfs(1); lis(); return 0; }
标签:its for dfs 二叉树 using c++ 遍历 org return
原文地址:https://www.cnblogs.com/duojiaming/p/11688518.html