[HAOI2009]毛毛虫

题目描述

对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 )。

输入输出格式

输入格式:

在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数。

接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N )。你可以假定没有一对相同的 (a, b) 会出现一次以上。

输出格式:

在文本文件 worm.out 中写入一个整数 , 表示最大的毛毛虫的大小。

输入输出样例

输入样例#1: 复制

13 12
1 2
1 5
1 6
3 2
4 2
5 7
5 8
7 9
7 10
7 11
8 12
8 13

输出样例#1: 复制

11

说明

40% 的数据, N ≤ 50000

100% 的数据, N ≤ 300000

题解

我真傻,真的。
我一开始以为以1为根节点。
然后找两条分链加加起来就好了。
测一下60分,以为是对的。
于是。。。。6点到10点,没有调出来,生无可恋。

最后还是看题解了。我真菜

我怎么就没想到要把每一个点作为一次根呢
然后因为是相连的点换根。所以子树的变化就是原根少一个点的子树,那个点的子树加上原根。
dp判断一下当前f[i]表示以i为根的最大长度。
然后毛毛虫可以是拼起来的。也就是说要记录最长和次长链。
end.

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=300005;
struct node{int nex,to;
}e[N<<1];
int size[N],n,m,num,head[N];
int f[N],ans,pre[N];
void add(int from,int to){num++;e[num].to=to;e[num].nex=head[from];head[from]=num;
}int read(){int x=0,w=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*w;
}void dfs(int x,int fa){size[x]=1;//int sum=0;for(int i=head[x];i;i=e[i].nex){int v=e[i].to;if(v==fa)continue;size[x]++;dfs(v,x);}
}void dfs2(int x,int fa){int max1=0,max2=0;for(int i=head[x];i;i=e[i].nex){int v=e[i].to;if(v==fa)continue;dfs2(v,x);if(f[v]>max1){max2=max1;max1=f[v];}else if(f[v]>max2)max2=f[v];f[x]=max(f[x],f[v]+size[x]-1);}ans=max(ans,max1+max2-1+size[x]);
}int main(){n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read();add(x,y);add(y,x);size[x]++;size[y]++;}for(int i=1;i<=n;i++)f[i]=1;dfs2(1,0);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/hhh1109/p/9603546.html

[HAOI2009]毛毛虫(树形dp)相关推荐

  1. P3174 [HAOI2009]毛毛虫(树形dp)

    P3174 [HAOI2009]毛毛虫 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边 ...

  2. [HAOI2009]毛毛虫

    题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大. 输入输出格式 输入格式: 在文本文件 worm.in 中第一行两个整数 N , M ,分 ...

  3. The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))

    思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...

  4. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  5. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  6. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  7. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  8. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  9. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  10. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

最新文章

  1. saltstack 服务配置
  2. 计算机攻防网站在线对攻,对攻
  3. android系统sharedUserId: SYSTEM_UID+PHONE_UID+BLUETOOH_UID+LOG_UID+NFC_UID
  4. maven POM总结
  5. python类的属性和对象属性_Python打印对象的全部属性
  6. asp.net页面回传与js调用服务端事件、PostBack的原理详解(转)
  7. php和apache2的配置
  8. opus在arm的嵌入式平台上的移植和开发
  9. 使用python来读取超大型文件数据
  10. 中点画线算法画直线----计算机图形学
  11. Android控件开发之Gallery3D酷炫效果(带源码)
  12. POJ 1080 Gene
  13. amd cpu排行_2019 CPU天梯图(intel和AMD CPU性能排行)
  14. 护眼软件Linux,四个 Linux 下的“护眼”软件解析
  15. JVM——深入理解类加载器
  16. Mybatis的作用
  17. 将音频转化为MP3格式(lame库)
  18. 《AcFun 的视频架构演化实践》阅读有感
  19. 华为时间管理之仁者见仁
  20. 菜谱识别_9种美味食谱,可共享,修改和重新混合

热门文章

  1. freessl 免费https证书申请
  2. 干预型ASO手段——积分墙
  3. python 输入整数_python输入整数
  4. java 怎么做批量修改_JAVA实现批量修改文件名称
  5. Less颜色混合函数(14)
  6. 2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南、正南、西南方向的
  7. ubuntu tty联网
  8. KB、kb和MB、mb有什么区别
  9. iphone6连接电脑后计算机不显示器,iPhone6怎么无故显示屏不亮了
  10. 微软的序列号生成和验证