P3174 [HAOI2009]毛毛虫(树形dp)
P3174 [HAOI2009]毛毛虫
题目描述
对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 )。
输入输出格式
输入格式:
在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数。
接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N )。你可以假定没有一对相同的 (a, b) 会出现一次以上。
输出格式:
在文本文件 worm.out 中写入一个整数 , 表示最大的毛毛虫的大小。
输入输出样例
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
11
说明
40% 的数据, N ≤ 50000
100% 的数据, N ≤ 300000
/* 类似dfs求直径 r[]为入度 一条毛毛虫的点数为 Σr[i]-(链长-1)+1 =Σ(r[i]-1)+2 */ #include<iostream> #include<cstdio> #include<cstring>#define N 300007using namespace std; int n,m,ans,cnt,S,T; int head[N],deep[N],pre[N]; int r[N]; struct edge{int u,v,net; }e[N<<1];inline int read() {int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }inline void add(int u,int v) {e[++cnt].v=v;e[cnt].net=head[u];head[u]=cnt; }void dfs(int u,int fa,int num) {if(num>ans) S=u,ans=num; for(int i=head[u];i;i=e[i].net){int v=e[i].v;if(v==fa) continue;dfs(v,u,num+r[v]);} }int main() {int x,y;n=read();m=read();memset(r,-1,sizeof r);for(int i=1;i<n;i++){x=read();y=read();add(x,y);add(y,x);r[x]++;r[y]++;}dfs(1,0,r[1]);ans=0;dfs(S,0,r[S]);printf("%d\n",ans+2);return 0; }
/* 把链连带链上的点的儿子算作一条链 f[x]表示以x为根最大链的大小 维护以某个点为根最大链和次大链计算答案 */ #include<iostream> #include<cstdio> #include<cstring>#define N 300007using namespace std; int f[N],head[N],son[N]; int n,m,k,ans,maxx; struct edge {int to,net; }e[N<<1];inline void add(int u,int v) {e[++k].to=v;e[k].net=head[u];head[u]=k; }inline int read() {int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }void dfs(int u,int fa) {int v,bigx=0,lowx=0;for(int i=head[u];i;i=e[i].net){v=e[i].to;if(v!=fa){dfs(v,u);if(f[v]>lowx)//维护最大链与次大链 {if(f[v]>bigx)lowx=bigx,bigx=f[v];else lowx=f[v];}f[u]=max(f[u],f[v]+son[u]-1);}}ans=max(ans,lowx+bigx+son[u]-1);//(-1是因为根节点重复加了) }int main() {n=read();m=read();for(int i=1;i<=m;i++){int u,v;u=read();v=read();add(u,v);add(v,u);son[u]++;son[v]++; }for(int i=1;i<=n;i++)f[i]=1;dfs(1,0);printf("%d",ans); }
转载于:https://www.cnblogs.com/L-Memory/p/9766728.html
P3174 [HAOI2009]毛毛虫(树形dp)相关推荐
- P3174 [HAOI2009] 毛毛虫
题意:给你一棵树,取出一根链和与链相邻的"脚":问能取出的最大节点数是多少? 分析:很容易想到:f[u] 是 u 为当前子树根节点的毛毛虫头时子树内毛毛虫最大点数.但当时其实最大的 ...
- [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的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...
最新文章
- TensorFlow实战笔记(17)---TFlearn
- linux服务器LVS/DR模式+nfs
- String/Stringbuilder/StringBuffer
- 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...
- C# WPF MVVM项目实战(进阶②)
- 关于sizeof在不同平台下的值
- C语言 printf函数实现
- vue中v-for指令的使用之Vue知识点归纳(八)
- YAML的扩展名是.yaml还是.yml?
- Kalman Filter—Step by step Derivation of Kalman Gain
- 【2019华东交通校赛:H】谁在说谎(思维)
- Moscow Pre-Finals Workshop 2020 - Legilimens+Coffee Chicken Contest (XX Open Cup, Grand Prix of Nanj
- 动态规划解决完全背包问题(cpp)
- beetlsql使用
- 怎样让Excel数据自动标记颜色?学会这一招让大家对你刮目相看
- 李彦宏对话IMF总裁拉加德:缓解B端焦虑,要看AI这道主菜味道如何
- 2022年最新谷歌翻译chrome 浏览器翻译解决方案
- 在嘲笑与冷眼下成长,并不断在泥潭中站起
- 刷脸支付设备深度融合多项赋能
- 点燃我,温暖你(打火机与公主裙)真零基础爱心教程!
热门文章
- js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...
- python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表
- php数组添加省会城市,【JSON数据】中国各省份省会城市经纬度 JSON
- centos7安装nginx和php,centos7安装nginx1.10和php7
- 临汾移动搜索引擎推广_竞价信息流移动搜索推广分析!
- Linux常用的20条运维命令,值得收藏!
- 数据库恢复相关知识笔记
- 你应该知道的jQuery技巧【收藏】
- 常用的7个SQl优化技巧
- astc贴图格式是什么意思_c4d配合AEe3d导入c4d模型贴图及插件安装所有流程