Codeforce 490E(树形dp)
来源:互联网 发布:淘宝如何做一件代发 编辑:程序博客网 时间:2024/05/21 07:55
链接:点击打开链接
题意:求树上的最长上升子序列长度
代码:
#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;vector<int> G[6005];int n,dp[6005],ans[6005],val[6005];void dfs(int s,int fa,int rt){ int i,cp,pos,tmp; for(i=0;i<G[s].size();i++){ tmp=G[s][i]; if(tmp==fa) continue; pos=lower_bound(dp,dp+n,val[tmp])-dp; cp=dp[pos]; dp[pos]=val[tmp]; ans[rt]=max(ans[rt],lower_bound(dp,dp+n,INF)-dp); dfs(tmp,s,rt); dp[pos]=cp; //将更改过的点回溯回去 }}int main(){ int i,j,u,v,res; while(scanf("%d",&n)!=EOF){ for(i=0;i<=n;i++) G[i].clear(); for(i=1;i<=n;i++) scanf("%d",&val[i]); for(i=1;i<n;i++){ scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } memset(ans,0,sizeof(ans)); for(i=1;i<=n;i++){ //就是枚举根节点,每次在树上进行lis memset(dp,INF,sizeof(dp)); dp[0]=val[i]; dfs(i,0,i); } res=1; for(i=1;i<=n;i++) res=max(res,ans[i]); printf("%d\n",res); } return 0;}
0 0
- Codeforce 490E(树形dp)
- Codeforce 219D(树形dp)
- Codeforce 581F(树形dp)
- Codeforce 486D(树形dp)
- Codeforce 337D 容斥+树形dp
- CodeForce 710E - Generate a String(dp)
- Codeforce 489E(dp+01分数规划)
- codeforces 23E 树形DP
- codeforces 23E 树形DP
- dp优化专辑 E - Computer [树形dp]
- CodeForce 280C Game on Tree -- 树形dp求期望
- 【CodeForce】509F Progress Monitoring(树形情景区间DP)
- codeforce 743 D. Chloe and pleasant prizes (树形dp)
- codeforce 855C. Helga Hufflepuff's Cup 树形DP
- codeforce 66E - Petya and Post(dp+减少冗余)
- Codeforce 题目479E Riding in a Lift(DP)
- Codeforce 803E. Roma and Poker(dp)
- codeforces 23E Tree (树形dp)
- 序列化与反序列化
- Ubuntu下查看磁盘空间大小
- Android:控件WebView显示网页
- 去掉字符串中首次连续出现k个0的子串。
- SDUT 3347 数据结构实验之数组三:快速转置
- Codeforce 490E(树形dp)
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- linux14.04下caffe的安装步骤
- 使用ngrok的总结
- Word Break(Java)
- Ubuntu Server 16.04 安装MySQL并设置远程访问
- linux杂记6
- MFC调用com打开文件预览
- Java实现AVL的一系列操作