[HAOI2009]毛毛虫

题意描述

思路

[HAOI2009]毛毛虫
树形DP
最大毛毛虫可以看做以一个节点为根
求它子树中节点及直接相邻节点个数最多的两条链
用con[now]数组表示i的子树中跟i直接相连的点的个数
(代码中的con[now]包括now自身)
假设 树根now=6,如图黄色部分
用num[now]表示以now为根的子树的链上及直接相连的点的最大个数
假设 树根now=6,如图红色部分
注“链上点及与其直接相邻的点最多的链”在此简称“最长链”
num的转移可写作:num[now]=max(num[now],num[v]+con[now]-1)
我们最终要求的是两条链,就相当于就最长链和次长链
在这里没有必要再循环一次来寻找次长链
可以直接设全局变量answer来记录“num[i]更新前的最长链+i子树中的最长链”的最大值
更新:answer=max(answer,num[u]+num[v]-1)
-1是因为v点重复
但是需要注意,如果答案中两条链的根节点不是1,
那么这个毛毛虫还包括根节点的父亲节点
如果根节点恰好是1,就没有所谓“父亲节点”
所以要进行判断
设select[i]=true表示根节点是i
最终进行判断即可

#include<iostream>
#include<cstring>
#include<cstdio>
#define N 300005
using namespace std;
int n,m;
struct edge{int u,v,nxt;
}e[N*2];
int cnt,first[N];
void add_edge(int x,int y){e[++cnt].u=x;e[cnt].v=y;e[cnt].nxt=first[x];first[x]=cnt;
}
bool vis[N];
int num[N],con[N];
void dfs(int now,int fat){vis[now]=true;for(int i=first[now];i;i=e[i].nxt){int v=e[i].v;if(!vis[v]){dfs(v,now);con[now]++;}}
}
int answer;
bool select[N];
void dp(int now){num[now]=con[now];vis[now]=true;for(int i=first[now];i;i=e[i].nxt){int v=e[i].v;if(!vis[v]){dp(v);if(answer<num[now]+num[v]-1){answer=num[now]+num[v]-1;select[now]=true;}
//            answer=max(answer,num[u]+num[v]-1);num[now]=max(num[now],num[v]+con[now]-1);}}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) con[i]=1;for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);add_edge(x,y);add_edge(y,x);}dfs(1,0);
//    for(int i=1;i<=n;i++){
//        printf("%d: %d %d\n",i,con[i],num[i]);
//    }memset(vis,false,sizeof(vis));dp(1);if(!select[1]) answer++;printf("%d\n",answer);return 0;
}

 

转载于:https://www.cnblogs.com/aptx--4869/p/9813332.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置数据源

1 阿里巴巴的druid数据源 <!-- 配置数据源 使用的是Druid数据源 -->-<bean destroy-method"close" init-method"init" class"com.alibaba.druid.pool.DruidDataSource" name"dataSource"><property name"url"…

[css] 举例说明clear取值有哪些?

[css] 举例说明clear取值有哪些&#xff1f; none 默认值。允许浮动元素出现在两侧。left 在左侧不允许浮动元素。right 在右侧不允许浮动元素。both 在左右两侧均不允许浮动元素。inherit 从父元素继承 clear 属性的值。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后…

python对excel的操作

1.写操作 import xlwt #只能写不能读 stus [[姓名, 年龄, 性别, 分数],[mary, 20, 女, 89.9],[mary, 20, 女, 89.9],[mary, 20, 女, 89.9],[mary, 20, 女, 89.9]] book xlwt.Workbook()#新建一个excel sheet book.add_sheet(case1_sheet)#添加一个sheet页 row 0#控制行 for…

mysql触发器不起作用 navicat的bug?

如果想插入数据,先设置主键,再依次设置其他属性值的时候&#xff0c;在你输入完主键&#xff0c;navicat执行insert操作 当你输入其他的时候&#xff0c;语句就变成了update&#xff0c;当然这期间没有点保存。所以写的触发器就一直失效。这是一个插入后生效的触发器。(因为一…

[css] 请写出:link、:visited、:hover、:active的执行顺序

[css] 请写出:link、:visited、:hover、:active的执行顺序 :link未访问链接:visited已访问的链接:hover鼠标悬停:active鼠标按下顺带一提&#xff0c;可交互式的组件还有一个:focus选中状态&#xff08;鼠标点击、TAB键&#xff09;个人简介 我是歌谣&#xff0c;欢迎和大家一…

CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

密钥登录步骤&#xff08;免密码登录&#xff09;ssh登录提供两种认证方式&#xff1a;口令(密码)认证方式和密钥认证方式。其中口令(密码)认证方式是我们最常用的一种&#xff0c;出于安全方面的考虑&#xff0c;介绍密钥认证方式登录到linux/unix的方法。 使用密钥登录分为3步…

windows环境下nginx的入门配置跳转tomcat

大家好&#xff0c;我是烤鸭&#xff1a;windows下配置nginx的目的就是要本地跟线上环境尽量保持一致。1. 下载官网下载地址 http://nginx.org/en/download.html我这里用的是nginx-1.13.0&#xff0c;看一下目录结构2. nginx关闭脚本 这里的nginx-killer就…

2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)

1&#xff0c;webservice是什么&#xff1f; webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。 2&#xff0c;springCloud是什么&#xff1f; springcloud是一个微服务框架&#xff0c;并提供全套分布式系统解决方案。支持配置管理&#xff0c;熔断机…

hadoop配置

hadoop入门配置 准备环境&#xff1a;cetnos6.9、java-1.7.0-openjdk-1.7.0.191.x86_64、hadoop1.2.1 编辑配置文件 hadoop-env.sh:export JAVA_HOME/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.191.x86_64 core.site.xml:<configuration><property><name>hadoop…

[css] 实现一个上下固定,中间自动填满的布局

[css] 实现一个上下固定&#xff0c;中间自动填满的布局 利用flex布局&#xff0c;flex-direction:column 定义排列方向为竖排 header footer 定高&#xff0c;中间部分flex:1; 一样可以实现 需要注意的是body和container容器需要设置高度100%;个人简介 我是歌谣&#xff0c;…

关于redis实现单点登录的一点思路

先简单说一下单点登录&#xff1a; 把登录的部分单独拿出来作为一个项目,专门用来登录。 当我想访问某个子项目或者模块的时候&#xff0c;会先请求登录的部分&#xff0c;如果登录过了&#xff0c;就不需要再登录了。 这个和单独项目时&#xff0c;把userId放到session中道…

Centos7修改主机名

# hostnamectl set-hostname 主机名 # hostnamectl status

SQL注入(1)

基于联合调查的SQL注入 我们先了解一下mysql的系统函数 user()database()version()concat()group_concat()datadir当前使用者的用户名当前数据库名数据库版本连接一个或者多个字符串接一个组的所有字符串&#xff0c;并以逗号分隔每一条数据读取数据库的绝对路径这里给大家提供…

[css] 怎样用纯CSS实现禁止鼠标点击事件?

[css] 怎样用纯CSS实现禁止鼠标点击事件&#xff1f; pointer-events: none; 是css3新出现的属性&#xff0c;意思就是禁止鼠标点击事件&#xff0c;当元素中有这一属性时&#xff0c;链接、点击事件统统失效。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放…

关于码云开源项目SpringBootAdmin多数据源配置

SpringBootAdmin是码云上一个以springboot为核心的开源的后台管理系统。这里是链接地址&#xff1a;点击打开链接由于是后台系统&#xff0c;应该采用数据库分离&#xff0c;权限&#xff0c;用户&#xff0c;角色和业务模块分开。application.properties #服务端口 server.por…

java将字符串转换成可执行代码

使用commons的jexl可实现将字符串变成可执行代码的功能通用工具类&#xff1a;/** * * author: Longjun * Description: 使用commons的jexl可实现将字符串变成可执行代码的功能 * date:2016年3月21日 下午1:45:13 */ public static Object convertToCode(String jexlExp,Map&…

22.敏捷估计与规划——Why Agile Planning Works笔记

00.经常进行重规划&#xff0c;是敏捷规划和估计为有效探索新产品开发解决方案控件提供支持的方法之一。在每次迭代开始时&#xff0c;都要建立该迭代的计划。发布计划要么在每次迭代后背更新&#xff0c;或者最差的时候也要在每几次迭代后被更新。计划要保持有用&#xff0c;就…

[css] 当全国哀悼日时,怎么让整个网站变成灰色呢?

[css] 当全国哀悼日时&#xff0c;怎么让整个网站变成灰色呢&#xff1f; body{-webkit-filter: grayscale(1);filter: grayscale(1); }/* OR */body{-webkit-filter: grayscale(100%);filter: grayscale(100%); }个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

jeesite使用心得(一)

<update id"updateSelective">UPDATE ${table.name} <set> <#list table.columnList as c><#if c.isEdit?? && c.isEdit "1"><if test"${c.javaFieldId} ! null" >${c.name} ${"#"}{${c.ja…

java List集合转换为List Map集合

/*** 将List<Object>转换为List<Map<String,Object>>* param list* return*/private List<Map<String,Object>> convertListMap(List<Object> list){List<Map<String,Object>> mapsnew ArrayList<Map<String,Object>…