[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,一经查实,立即删除!

相关文章

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

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

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;熔断机…

[css] 如果给一个元素设置background-color,它的颜色会填充哪些区域呢?

[css] 如果给一个元素设置background-color,它的颜色会填充哪些区域呢&#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

linux安装elasticsearch5.5

大家好&#xff0c;我是烤鸭: 我是采用官网下载tar包的方式安装的。 安装环境&#xff1a;centos 7.2,jdk1.8 下载地址: https://www.elastic.co/downloads/elasticsearch 1.解压缩&#xff1a; 解压 elasticsearch.5.5.2.tar.gz tar -zxvf elasticsearch-5.2.2.tar.gz2.创…

linux部署jenkins,tomcat9

大家好&#xff0c;我是烤鸭&#xff1a;今天分享的是 linux部署jenkins,tomcat9 安装环境&#xff1a;linux centos7.2tomcat 9.1Jenkins 2.73JDK 1.8maven 3.5git 2.91. 下载jenkins&#xff1a;https://jenkins.io/download/ 我选择的war下载。2. 安装…

jeesite的junit,数据没有插入?

jeesite框架自带的test方法 在common/test/SpringTransactionalContextTests.class 说一下遇到的问题。 sql执行成功了,但是数据库没有数据。what&#xff1f;&#xff1f;&#xff1f; 第一时间就想到了是事务的问题&#xff0c;事务没有提交。 RunWith(SpringJUnit4Class…

JAVA实现美团电影价格抓取(附代码)

各位老大好&#xff0c;我是烤鸭&#xff1a; 最近在研究爬虫,看到有意思的是美团的电影票价&#xff0c;普通的抓取是抓不到的。例如网址&#xff1a;http://bj.meituan.com/shop/105355906?mtt1.movie/cinemalist.0.0.j8oaf2un&#xff08;当你打开403或者404的话&#xff0…

使用jieba和wordcloud进行中文分词并生成《悲伤逆流成河》词云

因为词云有利于体现文本信息&#xff0c;所以我就将那天无聊时爬取的《悲伤逆流成河》的评论处理了一下&#xff0c;生成了词云。 关于爬取影评的爬虫大概长这个样子(实际上是没有爬完的): #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2018/10/15 16:34 # Auth…

jqweui的picker动态加载数据

大家好&#xff0c;我是烤鸭&#xff1a; jqweui的picker动态加载数据 jqweui是jquery对weui的拓展开发,picker就是其中的一个拓展组件&#xff0c; 1. 先附上官网显示地址和代码&#xff1a; http://jqweui.com/extends#picker <input type"text" idpicker/&g…

vue省市区三级联动mysql,js/json,html/jsp

大家好&#xff0c;我是烤鸭&#xff1a; 省市区三级联动数据及页面&#xff1a; 测试的时候&#xff0c;发现少了几个地区&#xff0c;现在补上了&#xff0c;也优化了下排版。 如果你懒得复制和看的话&#xff0c;这里是打包的下载地址。 之前的资源地址也改了&#xff0…

UI自动化之读取浏览器配置

以火狐浏览器为例 目录 1、找到配置项 2、读取配置 1、找到配置项 打开Firefox点右上角设置>&#xff1f;&#xff08;帮助&#xff09;>故障排除信息>显示文件夹&#xff0c;复制文件管理器地址栏 2、读取配置 用FirefoxProfile() 方法读取配置&#xff0c;然后再加载…

通过cmd命令,杀掉占用端口号的进程

错误问题&#xff1a;【Error running public: Unable to open debugger port (127.0.0.1:53110): java.net.BindException "Address already in use: JVM_Bind"】 解决步骤&#xff1a; 1&#xff09;netstat -aon|findstr 53110 此处的53110 根据自己错误中提示的…

解决使用adb卸载应用失败的问题

昨天使用adb命令成功安装了应用&#xff0c;但是在卸载时却报错&#xff0c;卸载失败&#xff0c;如下图&#xff1a; 然后我找了找原因&#xff0c;觉得可能是包名以及路径的原因&#xff0c; 于是就先把手机上的应用都打印出来看下&#xff0c; 列出手机装的所有app的包名&am…

linux安装docker部署java项目

大家好&#xff0c;我是烤鸭&#xff1a; 分享一下linux上部署docker的javaweb项目 1.环境 linux centos 7.2 64-bit 系统 kernel 3.10 查看版本号 &#xff1a; uname -r 大于3.10即可 2.安装docker 这里是官网安装教程 https://docs.docker.com/engine/installation/…

Java面试题谷歌插件

该插件可以让您在做WEB开发的同时&#xff0c;也可以去学习一些理论知识&#xff0c;加深你的技术。 随机题&#xff1a;每次点开插件&#xff0c;从题库中随机筛选出的题 当前题&#xff1a;是桌面通知的题目&#xff0c;每三分钟随机发送一次桌面通知 追加题&#xff1a;向…

Apache Curator之分布式锁原理(二)

本文主要讲解如下内容&#xff1a; 为什么要使用分布式锁&#xff1f;分布式锁特性&#xff01;分布式锁的实现方式有哪些&#xff1f;Curator分布式锁原理Curator分布式锁实现类UML及相关类的介绍基于Redis&#xff0c;数据库实现分布式锁为什么要使用分布式锁&#xff1f; 在…

阿里云服务器发送邮件失败?连接超时?25端口被封?

大家好&#xff0c;我是烤鸭&#xff1a; 之前用阿里云服务器的时候发送126企业邮箱&#xff0c;用的smtp方式&#xff0c;但是一直超时。百思不得其解。因为在本地环境是可以的。 原来是阿里云服务器限制了25端口。问了126邮箱那边的技术客服&#xff0c;只支持25端口。 问了…

springboot版的微信公众号,订阅号

大家好&#xff0c;我是烤鸭&#xff1a; 这是一篇微信公众号入门的文章&#xff0c;如果是个人的话&#xff0c;只能申请未认证的订阅号。如果是公司的话&#xff0c;想申请啥都是可以的。 这篇文章说的就是个人订阅号。 环境: centos 7.3 springboot 1.5 需要&#xff…

Javascript报错Failed to execute ‘querySelectorAll‘ on ‘Document‘: ‘#123456‘ is not a valid sele

Javascript报错&#xff1a;Failed to execute ‘querySelectorAll’ on ‘Document’: ‘#123456’ is not a valid selector 解决方式(除开特殊符号,第一个字符必须是字母)&#xff1a; 第一种&#xff1a; 将ID前面加字母&#xff0c;例如&#xff1a;document.querySelect…