题目链接

  树形DP水题,设f[x][0]是以x为根的子树,内部只有半条链(就是链的两个端点一个在子树里,一个不在子树里)的最大值,f[x][1]是以x为根的子树,内部有一条完整的链(选两个内部的子树作为链的左端点和右端点)的最大值。

  于是可以很轻松的得出DP方程:

  一开始f[x][0]=f[x][1]=1

  然后dfs,深搜x的子树,记录一下x有多少子节点的同时记录子树的最大半链和次大半链(用来在转移的时候凑成x子树内的整个链)。最后注意细节乱搞搞就行了。

  本题不考思维但是比较考验考虑细节的能力。

  (具体有哪些坑点不知道,因为是1A)

  

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 300010
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int f[maxn][]; struct Edge{
int next,to;
}edge[maxn*];
int head[maxn],num;
inline void add(int from,int to){
edge[++num]=(Edge){head[from],to};
head[from]=num;
} void dfs(int x,int fa){
int fir=,sec=,son=;
f[x][]=f[x][]=;
for(int i=head[x];i;i=edge[i].next){
int to=edge[i].to;
if(to==fa) continue;
son++;
dfs(to,x);
if(fir<f[to][]){
sec=fir;fir=f[to][];
}
else if(sec<f[to][]) sec=f[to][];
}
if(son>) f[x][]=max(f[x][],fir+sec+son-);
else f[x][]=max(f[x][],fir+);
f[x][]=max(f[x][],fir+son);
} int main(){
int n=read(),m=read();
for(int i=;i<=m;++i){
int x=read(),y=read();
add(x,y);
add(y,x);
}
dfs(,);
int ans=f[][];
for(int i=;i<=n;++i) ans=max(ans,f[i][]+);
printf("%d\n",ans);
return ;
}

最新文章

  1. css:删除:&#215;的效果
  2. Eclipse 插件安装方法和插件加载失败解决办法
  3. Intellij Idea 创建EJB项目入门(一)
  4. HTTP/1.1 Range和Content-Range
  5. Verilog中锁存器与多路选择器
  6. Codeforces Round #242 (Div. 2) &amp;lt;A-D&amp;gt;
  7. c++,类的组合
  8. 利用git提交代码
  9. Vue语法学习第三课——计算属性
  10. Day3:html和css
  11. 基于 HTML5 的工业互联网 3D 可视化应用
  12. JavaSE| 包装类| 时间
  13. java的poi 读取exc 文件
  14. C#获取文件MD5值方法
  15. git只合并某一个分支的某个commit
  16. hdu 4939 三色塔防
  17. Think PHP递归重新排序无限极子分类数组(递归无限极分类)
  18. Ubuntu 16.04LTS 安装 Node.js stable
  19. javascript json数据的处理
  20. 6.006 Introduction to Algorithms

热门文章

  1. python爬虫之路——对字符串的处理
  2. 【PowerShell语音计算器】
  3. 摘自 dd大牛的《背包九讲》
  4. STM32F042开发板学习实践
  5. 【0624作业】使用Scanner类输入并显示会员卡号
  6. C#动态数组ArrayList
  7. nodejs写一个简单的Web服务器
  8. mysql基本知识点
  9. Angular - Can&#39;t bind to &#39;ngModel&#39; since it isn&#39;t a known property of &#39;input&#39;.
  10. IntelliJ IDEA 配置 Tomcat 运行web项目