[haoi2009]毛毛虫 树形dp
这道题细节处理不少,但要AC不难;
设以i节点为根节点的子树能形成的最大的毛毛虫长度为f[i],则f[i]=max(f[j])+i节点的孩子数;
答案需要f最大和次大的两个子树合并,而且若合并的位置不是根节点,ans++;
我就是坑在了最后一点上,最后打表找到了问题;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=303000; 6 int n,m,f[maxn],child[maxn]; 7 struct node{ 8 int y,next; 9 }e[maxn<<1]; 10 int linkk[maxn],len=0; 11 void insert(int x,int y){ 12 e[++len].y=y; 13 e[len].next=linkk[x]; 14 linkk[x]=len; 15 } 16 void init(){ 17 scanf("%d%d",&n,&m); 18 int x,y; 19 for(int i=1;i<=m;i++){ 20 scanf("%d%d",&x,&y); 21 insert(x,y);insert(y,x); 22 } 23 } 24 void dfs(int x,int fa){ 25 for(int i=linkk[x];i;i=e[i].next){ 26 if(e[i].y==fa)continue; 27 child[x]++; 28 dfs(e[i].y,x); 29 } 30 } 31 int ans=0; 32 void Dfs(int x,int fa){ 33 if(child[x]==0){ 34 f[x]=1;return; 35 } 36 int maxx[2]={0,0}; 37 for(int i=linkk[x];i;i=e[i].next){ 38 if(e[i].y==fa)continue; 39 Dfs(e[i].y,x); 40 f[x]=max(f[x],f[e[i].y]+child[x]); 41 if(f[e[i].y]>maxx[0])maxx[0]=f[e[i].y]; 42 if(f[e[i].y]>maxx[1])maxx[0]=maxx[1],maxx[1]=f[e[i].y]; 43 } 44 ans=max(ans,f[x]+maxx[0]-1); 45 if(x!=1)ans=max(ans,f[x]+maxx[0]); 46 if(maxx[0]==0)ans=max(ans,f[x]); 47 } 48 void work(){ 49 dfs(1,0); 50 Dfs(1,0); 51 printf("%d\n",ans); 52 } 53 int main(){ 54 freopen("1.in","r",stdin); 55 freopen("1.out","w",stdout); 56 init(); 57 work(); 58 }
View Code
转载于:https://www.cnblogs.com/chadinblog/p/5843779.html
[haoi2009]毛毛虫 树形dp相关推荐
- P3174 [HAOI2009]毛毛虫(树形dp)
P3174 [HAOI2009]毛毛虫 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边 ...
- [HAOI2009]毛毛虫
题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大. 输入输出格式 输入格式: 在文本文件 worm.in 中第一行两个整数 N , M ,分 ...
- The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))
思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...
- BNUOJ 52305 Around the World 树形dp
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...
- [树形dp] Jzoj P5233 概率博弈
Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- BZOJ 1040 ZJOI2008 骑士 树形DP
题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...
- POJ 3342 树形DP+Hash
这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...
- [NC15748]旅游 树形dp基础
菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...
- 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings
题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...
最新文章
- python有序队列_Python 队列
- leetcode27 移除元素
- 西门子和阿里云要搞啥事情?| 极客头条
- JavaScript中的arguments对象
- 洪筱楠(1996-),女,对外经济贸易大学国际经济贸易学院经济学荣誉学士实验班本科生。...
- spring mysql 多数据源_spring框架学习【多数据源配置】
- HTTP协议(转自:小坦克博客)
- 文字旋转_如何制作抖音文字旋转视频?推荐这款超火的抖音文字动画制作神器...
- 过游戏保护系列-巨人游戏保护(1)过PcHunter和Od检测
- 安装Microsoft Office Document Image Writer
- 高等数学关于切线,法线,切平面,法平面的详细解释
- 清华、南京大学计算机系女神非常敬佩的IT公众号
- Java五子棋书,本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam; import java.awt.Bo...
- “剧情+综艺” 助推国潮文化破圈
- 人像图片Relight
- 图形学 (-)数学基础
- Android模拟器编程,Android模拟器入门[转]
- 数据可视化-柱状图-dict结构MACARONS主题
- Java程序员的重启人生-1.初到异世界
- 【转】SLAM 论文阅读和分类整理