当前位置: 代码迷 >> 综合 >> CF490F Treeland Tour
  详细解决方案

CF490F Treeland Tour

热度:45   发布时间:2024-02-21 02:27:33.0
以每个点为起点,做一次朴素的nlogn复杂度的lis,共n个点做n次,总复杂度:O(n^2 log n)
注意树上操作时的还原操作。
#include <bits/stdc++.h>
using namespace std;
const int N=6e3+5;
int n,u,v,ans;
int a[N],f[N];
int cnt,head[N];
struct edge{
    int next,to;}e[N<<1];inline void add(int u,int v)
{
    cnt++;e[cnt].next=head[u];e[cnt].to=v;head[u]=cnt;
}void dfs(int u,int fa)
{
    int pos=lower_bound(f+1,f+n+1,a[u])-f;ans=max(ans,pos);int now=f[pos];f[pos]=a[u];for (register int i=head[u]; i; i=e[i].next) if (e[i].to!=fa) dfs(e[i].to,u);f[pos]=now;
}int main(){
    scanf("%d",&n);for (register int i=1; i<=n; ++i) scanf("%d",&a[i]);for (register int i=1; i<n; ++i) scanf("%d%d",&u,&v),add(u,v),add(v,u); for (register int i=1; i<=n; ++i){
    memset(f,60,sizeof(f));dfs(i,0);	}printf("%d\n",ans);
return 0;
}
  相关解决方案