题目描述

对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 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

解题思路:树形DP

f[i]表示以i为根的子树的最长长度。

link[i]表示与i相连的点的个数

那么对于某个节点i,他对答案的贡献为:

由i扩展出去的最长链长度+由i扩展出去的次长链长度+与i相连的点的个数(注意更新时节点的重复)

#include<iostream>
#include<cstdio>
#include<algorithm>
#define DB double
#include<cmath>
#define pi 3.1415926535898
using namespace std;
inline int read()
{
	int x=0,w=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') w=-1;ch=getchar();}
	while(isdigit(ch)) x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
	return x*w;
}
const int N=300009;
struct node{
	int u,v,ne;
}e[N*2];
int n,h[N],tot;
void add(int u,int v)
{
	tot++;e[tot]=(node){u,v,h[u]};h[u]=tot;
}
int m,link[N],f[N],ans;
void dfs(int x,int fa)
{
	int l1=-1,l2=-1;
	for(int i=h[x];i;i=e[i].ne)
	{
		int rr=e[i].v;
		if(rr==fa) continue;
		dfs(rr,x);
		if(f[rr]>l2)
		{
			if(f[rr]>l1) l2=l1,l1=f[rr];
			else l2=f[rr];
		}
		f[x]=max(f[x],f[rr]+link[x]-1);
	}
	ans=max(ans,l1+l2+link[x]-1);
}
int main()
{
	n=read();m=read();
	for(int i=1;i<=m;++i)
	{
		int x,y;x=read();y=read();
		add(x,y);add(y,x);
		link[x]++;link[y]++;
	}
	for(int i=1;i<=n;++i) f[i]=1;
	dfs(1,0);
	printf("%d",ans);
	return 0;
}

  勿忘初心!

[HAOI2009]毛毛虫的更多相关文章

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

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

  2. [HAOI2009]毛毛虫(树形dp)

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

  3. [haoi2009]毛毛虫 树形dp

    这道题细节处理不少,但要AC不难: 设以i节点为根节点的子树能形成的最大的毛毛虫长度为f[i],则f[i]=max(f[j])+i节点的孩子数: 答案需要f最大和次大的两个子树合并,而且若合并的位置不 ...

  4. P3174 [HAOI2009]毛毛虫

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

  5. [洛谷P3174][HAOI2009]毛毛虫

    题目大意:给一棵树,求其中最大的“毛毛虫”,毛毛虫的定义是一条链上分出几条边 题解:把每个点的权值定义为它的度数减一,跑带权直径即可,最后答案加二 卡点:无 C++ Code: #include &l ...

  6. 洛谷 3174 [HAOI2009]毛毛虫

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

  7. 【Luogu P3174 】[HAOI2009]毛毛虫

    前言: 虽然很多人和我想法一样 ,但我还是不要脸地写了这题解 题目: 链接 大意: 在一棵树上取一条最长链以及它所连接的结点总共的结点个数 思路: 取链: 用树形\(DP\)就可以轻而易举的解决这个问 ...

  8. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  9. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

随机推荐

  1. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  2. java中static关键字的继承问题

    结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...

  3. 织梦dedecms如何去除版权中的Power by DedeCms

    很多站长在使用dedecms建站过程中,很多人都会调用到dedecms自带的powerby标签,这样在版权信息中就会多出Power by DedeCms这个连接.今天教大家如何去除. 工具/原料 de ...

  4. JavaScript基础:DOM操作详解

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 JavaScript的组成 JavaScript基础分为三个部分: ...

  5. 详解javascript中的闭包

    全局变量与局部变量 在说闭包之前先说明全局变量与局部变量 全局变量:变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义. 局部变量:使用var关键字定义 全局变量/局部变 ...

  6. 实现鼠标hover动画效果自己理解的两种方法——练习笔记

    练习前端技术学院的任务,需要实现"导航栏中的链接,随着鼠标悬浮的位置,相应的链接下出现红色线段"的效果(如图1),我的理解有简易与稍显复杂一些的方法: 首先想到的就是直接利用伪元素 ...

  7. mysql-高性能索引策略

    原文转自:http://www.cnblogs.com/happyflyingpig/p/7655762.html 独立索引: 独立索引是指索引列不能是表达式的一部分,也不能是函数的参数 例1: SE ...

  8. 2017-06-28(passwd 主要组与附属组 gpasswd newgrp groups)

    passwd passwd -l 用户名  (锁定用户) passwd -u 用户名 (解锁用户) passwd -d 用户名  (清楚用户密码) 主要组与附属组 一个用户可以同时属于多个组,其中一个 ...

  9. 谈Ajax的Get和Post的区别

    Get方式:   用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行 ...

  10. 转-WebService到底是什么?

    原文链接:WebService到底是什么? 一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多 ...