P3174 [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

/*
类似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)相关推荐

  1. P3174 [HAOI2009] 毛毛虫

    题意:给你一棵树,取出一根链和与链相邻的"脚":问能取出的最大节点数是多少? 分析:很容易想到:f[u] 是 u 为当前子树根节点的毛毛虫头时子树内毛毛虫最大点数.但当时其实最大的 ...

  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的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

最新文章

  1. TensorFlow实战笔记(17)---TFlearn
  2. linux服务器LVS/DR模式+nfs
  3. String/Stringbuilder/StringBuffer
  4. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...
  5. C# WPF MVVM项目实战(进阶②)
  6. 关于sizeof在不同平台下的值
  7. C语言 printf函数实现
  8. vue中v-for指令的使用之Vue知识点归纳(八)
  9. YAML的扩展名是.yaml还是.yml?
  10. Kalman Filter—Step by step Derivation of Kalman Gain
  11. 【2019华东交通校赛:H】谁在说谎(思维)
  12. Moscow Pre-Finals Workshop 2020 - Legilimens+Coffee Chicken Contest (XX Open Cup, Grand Prix of Nanj
  13. 动态规划解决完全背包问题(cpp)
  14. beetlsql使用
  15. 怎样让Excel数据自动标记颜色?学会这一招让大家对你刮目相看
  16. 李彦宏对话IMF总裁拉加德:缓解B端焦虑,要看AI这道主菜味道如何
  17. 2022年最新谷歌翻译chrome 浏览器翻译解决方案
  18. 在嘲笑与冷眼下成长,并不断在泥潭中站起
  19. 刷脸支付设备深度融合多项赋能
  20. 点燃我,温暖你(打火机与公主裙)真零基础爱心教程!

热门文章

  1. js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...
  2. python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表
  3. php数组添加省会城市,【JSON数据】中国各省份省会城市经纬度 JSON
  4. centos7安装nginx和php,centos7安装nginx1.10和php7
  5. 临汾移动搜索引擎推广_竞价信息流移动搜索推广分析!
  6. Linux常用的20条运维命令,值得收藏!
  7. 数据库恢复相关知识笔记
  8. 你应该知道的jQuery技巧【收藏】
  9. 常用的7个SQl优化技巧
  10. astc贴图格式是什么意思_c4d配合AEe3d导入c4d模型贴图及插件安装所有流程