【洛谷P3629】巡逻【树的直径】

答题积分小程序云开发实战-开篇:项目介绍以及效果图 我也看过不少的册子或者文章,大部分都很优秀,但也有的就长篇累牍,从时代背景讲起,复述各种基本概念、底层原理......嗯,看似很高级~但我阅读的时候,给我的感觉是,把你绕晕、把你劝退的感觉,相信大家都有同感,如图所示:但既然是教程,那就得有教程的样子,其本质应该是简单而直接的。尽可能的简单直白一点,让读者直接能获取到关键的有价值的信息。什么是关键有价值的信息,那就是我作为读者想要直接能获得的信息。“能用非技术的语言,简单的去描述一个复杂的技术问题,让一个初学者或者在校学生,甚至是门外汉都能够理解。 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P3629
有一棵边权为均 1 1 1的树,要求从点 1 1 1经过所有的点并会到点 1 1 1,现在可以加入 k ( 1 ≤ k ≤ 2 ) k(1\leq k\leq 2) k(1≤k≤2)条边,而且加入的边必须仅仅经过一次,求加入边后最少的回到点 1 1 1的距离。


思路:

很容易发现,如果一条边都不加,那么肯定树中的每一条边都要经过两次。那么答案就是 2 ( n − 1 ) 2(n-1) 2(n−1)。但是现在加入一条边 ( x , y ) (x,y) (x,y),那么从 x x x走到 y y y之后就可以直接返回 x x x,就可以使原来 x x x到 y y y的路径只走一遍。那么我们为了保证减少更多的路,那么肯定就是在树的直径的两端脸上一条边!
那么对于 k = 1 k=1 k=1的情况就讨论完了,答案就是 2 ( n − 1 ) − 2(n-1)- 2(n−1)−树的直径 + 1 +1 +1。
那么接下来讨论 k = 2 k=2 k=2的情况。
在 k = 1 k=1 k=1的基础上,我们要再加一条边,那么会有两种选择:

  1. 新加入的边和之前加入的边互不干扰,即新加入的边所组成的环和原来加入的边所组成的环不重合。
  2. 新加入的边和之前加入的边有地方重合了。那么可以发现,为了保证满足新加入的边也走一遍,重合的地方就会多走一遍。那么之前减去的地方就要加回来。

那么应该怎么做呢?
不难看出,第二问的“要加回来”其实就是把边权取反的意思。因为把边权取反之后如果在走这条边就相当于加回来了。
那么就再跑一遍树的直径,答案就是 2 ( n − 1 ) − 2(n-1)- 2(n−1)−树的直径 1 − 1- 1−树的直径 2 + 2 2+2 2+2。
注意第二遍要用树形 D P DP DP,因为会出现负边权。


代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=100100;
int n,k,x,y,q,p,tot=1,sum,ans1,ans2,head[N],father[N],f[N];

struct edge
{
	int next,to,dis;
}e[N*2];

void add(int from,int to)
{
	e[++tot].to=to;
	e[tot].dis=1;
	e[tot].next=head[from];
	head[from]=tot;
}

void dfs1(int x,int fa,int s)
{
	if (s>sum) sum=s,p=x;
	for (int i=head[x];~i;i=e[i].next)
		if (e[i].to!=fa)
			dfs1(e[i].to,x,s+e[i].dis);
}

void dfs2(int x,int fa,int s)
{
	if (s>ans1) ans1=s,q=x;
	for (int i=head[x];~i;i=e[i].next)
		if (e[i].to!=fa)
		{
			father[e[i].to]=x;
			dfs2(e[i].to,x,s+e[i].dis);
		}
}

void dp(int x,int fa)
{
	for (int i=head[x];~i;i=e[i].next)
	{
		int y=e[i].to;
		if (y==fa) continue;
		dp(y,x);
		ans2=max(ans2,f[x]+f[y]+e[i].dis);
		f[x]=max(f[x],f[y]+e[i].dis);
	}
}

void change(int x,int y)  //把边权取反
{
	if (x==y) return;
	for (int i=head[x];~i;i=e[i].next)
		if (e[i].to==father[x])
		{
			e[i].dis=-1;
			e[i^1].dis=-1;
			change(e[i].to,y);
		}
}

int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d%d",&n,&k);
	for (int i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	dfs1(1,0,0);
	dfs2(p,0,0);  //求第一遍树的直径
	if (k==1) return !printf("%d\n",2*(n-1)-ans1+1);  //k=1
	change(q,p);
	dp(1,0);  //求第二遍树的直径
	printf("%d\n",2*(n-1)-ans1-ans2+2);  //k=2
	return 0;
}
微信原生小程序+云开发:3天零运维上线答题系统 小程序云开发是一种将数据库、存储与函数能力深度集成于微信生态的Serverless架构,其核心原理是通过wx.cloud统一API屏蔽后端基础设施复杂性,实现前端直连云资源。技术价值在于大幅降低中小型项目在部署成本、运维负担和数据合规上的门槛,尤其适合知识问答、课前测、安全考试等轻量互动场景。本文聚焦微信原生语法与云开发双栈实践,详解题库管理、防重提交、权限控制与真机避坑等关键环节,提供可直接复用的云函数代码与安全规则配置。 阅读详情

相关推荐

微信小程序答题系统开发:云开发全栈实战与二次开发指南

微信小程序云开发是一种基于微信生态的Serverless技术方案,通过云函数、云数据库和云存储等能力,让开发者无需自建服务器即可快速构建应用。其核心原理是将后端逻辑托管到云端,前端直接调用云函数,利用openid实现免鉴权登录,数据以JSON文档形式存储,天然支持灵活扩展。这种模式的技术价值在于大幅降低运维成本,提升开发效率,尤其适合快速迭代的中小型项目。在应用场景上,云开发广泛用于活动报名、在线测评、企业内训等互动型小程序。本文以答题小程序为例,详细拆解了从环境配置、云函数部署到核心判分逻辑的完整链路,并

weixin_36123300的博客 267

基于微信小程序云开发实现考研题库小程序项目(完整版)

考研题库小程序云开发实战,完整版提供给大家学习。题库小程序,基于云开发的微信答题小程序,软件架构是微信原生小程序+云开发。 一、项目预览 1、页面结构 首页 答题页 结果页 我的页 排行榜页 答题历史页 登录页 使用指引页 2、功能结构 实现页面间跳转功能 微信授权登录 获取微信头像和昵称等 按科目分类 题库随机抽题算法 支持单选、判断、多选 实现用云开发实现查询题库功能 实现动态题目数据绑定 答题交互逻辑 切换下一题 答题进度显示 提交答卷保存到云数据库集合 系统自动判分 答题结果页从云数据库查询答题成

mon_star°的博客 1万+

微信小程序答题系统云开发实战:数据库、函数与防刷设计

云开发是微信生态下轻量级后端服务的核心能力,其本质是将数据库、云函数、存储三大组件以Serverless方式封装,降低运维复杂度并提升交付效率。原理上依托权限模型、冷启动优化与CDN自动分发实现高可用;技术价值在于让前端工程师可独立完成强交互、高并发读写类应用的闭环交付。典型应用场景包括知识竞赛、企业内训、校园打卡等教育类小程序。本文聚焦答题小程序这一垂直场景,深入解析云开发环境初始化、NoSQL数据库索引与权限设计、事务型云函数开发(如submitAnswer)、Redis防重提交及上线避坑指南,覆盖从0

weixin_30575517的博客 212

基于微信云开发的防诈反诈宣传教育答题小程序

本系统中管理员主要负责审核管理用户,录入新的试题,创建考卷,审核用户的考试信息和单位信息等,用户可以进行学习、答题、排名等。管理员为题库管理、题目分类管理、用户管理、考试管理等,用户的功能为查询考卷,在线答题、提交答卷、管理个人信息等。用户可以管理个人资料、查询题目、在线练习和在线考试、查看实时排名等,用户的个人资料是用户填写提交是产生,用户的成绩右用户答题考试提交时产生,题库题目由管理员添加录入时产生,用户创建的单位需要经过管理员审核。用户可以管理自己的答题考试记录,在答题历史界面里也可以进行查询操作。

mon_star°的博客 1235

微信原生小程序+云开发答题应用架构实战:从选型到避坑

微信小程序云开发将服务器、数据库、缓存和定时任务映射为云函数、云数据库、聚合查询和定时触发器,大幅降低运维成本,但架构决策仍需开发者自行把控。答题类应用涉及题库加载、服务端计时、判分、排行榜聚合与防重复提交等核心链路,每个环节在云开发模式下都有特定约束。合理设计云函数分工边界、数据库权限与索引策略,结合会话快照和唯一索引等工程实践,可有效避免冷启动延迟、查询性能瓶颈和权限失控等常见问题,构建稳定可用的答题小程序。

weixin_42602368的博客 89

微信小程序云开发答题系统实战:从题库到排行榜全流程

微信小程序云开发是一种无需自建服务器的后端云服务方案,通过云数据库、云函数和云存储实现数据持久化与业务逻辑。其核心原理是将敏感操作如判分、排行榜聚合放在云端执行,前端仅负责渲染交互,从而提升安全性与性能。技术价值在于降低运维成本、支持快速迭代,并保障数据一致性。典型应用场景包括在线答题、投票统计、用户积分系统等。本文围绕一套答题小程序,详细拆解了云环境初始化、数据模型设计、抽题判分云函数、排行榜聚合查询以及定时归档等关键实现,并总结了权限配置、时区处理等常见避坑经验。

weixin_29885875的博客 83

基于云开发搭建安全生产知识答题活动小程序v3.0

安全生产知识答题活动小程序v3.0,基于云开发的答题活动小程序。本项目技术栈基于 ES2015+、WXML、WXSS、JavaScript 、微信原生 API和云开发,所有的请求数据都使用云数据库的小程序端SDK进行查询,提前了解和学习这些知识会对使用本项目有很大的帮助。

mon_star°的博客 1269

微信小程序答题系统实战:云开发零运维落地方案

微信小程序答题系统是教育类轻应用的核心场景,其本质是围绕题库管理、实时判分与状态同步的数据驱动型应用。基于云开发的Serverless架构,天然规避服务器运维、HTTPS配置与并发熔断等传统后端痛点,通过云函数、云数据库和云存储三要素即可闭环实现‘录入-组卷-作答-统计’全链路。该方案特别契合无后端团队、快速交付及微信生态合规要求等现实约束,已在27个教育项目中验证其稳定性与上线效率。文中聚焦答题业务高频需求,结合云数据库索引优化、云函数幂等设计、聚合管道排行榜等关键技术点,提供可直接复用的生产级实践路径。

weixin_29895109的博客 25

基于云开发的答题活动小程序v2.0-完整项目分享(附源码)

答题活动小程序v2.0,是一个微信小程序答题软件,它基于微信原生小程序+云开发实现。提炼了典型的业务模型,它可以帮助你快速搭建各种形式的答题软件产品。相信不管你的需求是什么,本项目都能帮助到你。

mon_star°的博客 6599

微信答题小程序云开发实战:四个云函数搞定登录抽题判分排行

微信小程序的后端开发常面临用户身份绑定、题库管理、交卷判分和排行榜并发写入等难题。借助微信云开发,开发者无需自建服务器,通过云函数与云数据库即可构建完整业务链路。云函数在服务端运行,天然拥有管理权限,可安全地处理登录鉴权、随机抽题、自动判分与排名更新,而聚合采样和原子更新等数据库能力则有效避免了超时与并发覆盖问题。这类架构适合企业内部培训、知识竞赛等轻量应用,本文从一个实际项目出发,拆解四个云函数如何支撑答题全流程。

weixin_30899023的博客 156

微信小程序答题系统源码解析:云开发实现题库、判分与排行榜

微信小程序云开发是一种基于Serverless架构的移动应用开发模式,它将后端服务如数据库、存储和云函数无缝集成,让开发者无需管理服务器即可构建完整应用。其核心原理是前端通过API调用云函数执行逻辑,数据存储在云数据库中,确保安全性和可扩展性。这种模式的技术价值在于降低运维成本、提升开发效率,并支持实时数据同步。在答题类小程序中,云开发能实现题库管理、自动判分和排行榜功能,同时通过服务端判分防止作弊。热词“云函数”和“云数据库”在其中扮演关键角色,云函数处理业务逻辑,云数据库存储结构化数据。应用场景包括企业

weixin_42531516的博客 232

java答题pk小程序源码开发全流程:对战答题、时时排名

本文介绍一款基于微信原生小程序开发的答题PK小程序源码,采用"前端+云开发"架构,无需额外部署服务器。核心功能包括实时双人PK答题、单人练习、排行榜和题库管理,支持微信授权登录、积分系统和错题本功能。技术栈涵盖微信原生框架、云数据库和云函数,代码结构清晰易于二次开发。部署流程简单,支持扩展多人对战、语音答题等进阶功能。适合个人开发者快速上线或企业定制开发,需注意云开发资源限制和数据安全问题。

suncentwl的博客 1263

微信答题小程序完整源码包:云开发后端+20+张实机界面截图

一套开箱即用的微信原生答题小程序代码,前端用标准WXML/WXSS/JS构建,后端完全依赖微信云开发(CloudBase),不用买服务器、不用配域名、不用部署后端服务。功能覆盖用户答题流程、题目增删改查、答题记录存储、实时分数计算与展示、结果页反馈等核心环节。项目已预置常用工具函数(util.js)、全局应用逻辑(app.js)、云环境配置(project.config.)、权限配置(sitemap.)和基础样式资源。压缩包里包含20多张真实运行截图,涵盖首页、题库列表、单题作答、倒计时交互、得分详情、错题

websocket5live的博客 281

微信小程序答题系统全栈实战:云开发数据库模型与核心模块实现

小程序开发已经成为前端工程师必须掌握的核心技能之一,它以轻量、免安装、传播链路短等优势,广泛应用于在线教育、企业培训、知识竞赛等场景。构建一个答题小程序,不仅涉及页面交互与倒计时逻辑,更考验对云端数据模型的设计能力。本文从微信小程序原生框架出发,结合云开发后端能力,系统讲解题库随机抽题、答题记录存储、交卷判分以及排行榜索引优化等关键技术原理。同时针对培训考核、知识竞赛、营销裂变等不同应用场景,分析技术方案的选型差异。通过合理的数据库权限控制与性能优化,开发者可以快速搭建一套稳定、安全、可分享的在线答题系统,

weixin_33334142的博客 300

基于微信小程序云开发的在线答题考试系统设计与实现

在线答题与考试系统是企业培训、学校考核和知识竞赛中常见的数字化工具。传统前后端分离架构需要服务器、数据库和域名备案,部署成本高且维护复杂。而微信小程序云开发以云函数、云数据库和免鉴权登录为核心,将服务端逻辑与前端页面无缝整合,大幅降低开发门槛。题库数据存储在云端文档型数据库中,通过云函数动态抽题、服务端判分,既能保证题目安全,又支持单选、多选、判断等多种题型。考生作答记录、成绩统计与错题回顾均可实时落库,便于后续多维分析。从模拟考试到正式考核,微信小程序的即用即走特性让系统分发更便捷,配合云开发弹性扩缩容能

weixin_33913332的博客 342

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

基于云开发的答题活动小程序v2.0,终于赶在11月最后一天完成了

是的,你没听错没看错。这个,就是基于云开发的答题活动小程序,并且是v2.0版本! 之前在做“手把手教你搭建答题活动小程序v1.0系列文章”的教程的时候,我就已经马不停蹄地在构思v2.0的迭代版本的内容,以及持续地投入时间和精力进行设计与开发搭建中了。 终于!赶在11月最后一天!!完成了!!! 答题活动小程序v2.0,主要包含六大功能模块页面,首页、答题页、结果页、活动规则页、答题记录页、排行榜页。接下来,我简单的归纳总结一下,分析一下技术要点,以及分享源码给大家。与君共勉。 先看看效果吧

mon_star°的博客 1176

大模型面试题34:Transformer的Encoder和Decoder区别与协作

Encoder:双向自注意力,专注理解输入,输出语义特征;Decoder:掩码自注意力+编码器-解码器注意力,专注生成输出,实现语义对齐。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 812

基于云开发搭建学法普法专题法律知识答题活动小程序v3.0

学法普法专题法律知识答题活动小程序v3.0,基于云开发的答题活动小程序。本项目技术栈基于 ES2015+、WXML、WXSS、JavaScript 、微信原生 API和云开发,所有的请求数据都使用云数据库的小程序端SDK进行查询,提前了解和学习这些知识会对使用本项目有很大的帮助。

mon_star°的博客 769

AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程

由于需要学习一下atmel的atsaml 系列,使用AtmelStudio 7开发,之前主要用STM32,现在看到Atmel的库函数,其实是有些类相似的。 ASF3的库对应ST的标准库。ASF4对应ST的HAL库,Ateml Start对应STM32CubeMX。但在这里还是用ASF3来开发,因为Ateml Start还不支持我的这个芯片,而且和STM32的HAL库类似,ASF4为了好移植都是底...

yxy244的博客 8653

SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

文章目录一.简要介绍1.node file2.edge file3.lane definitions(1)路段细分(2)邻近的对向车道(3)删除边或车道4.type file(1)简要概述(2)edge定义中引用type文件的示例(3)指定车辆种类的速度限制5.connections file(1)简要概述:(2)connection的属性参数(3)删除连接(4)设置连接的优先级(5)同一边的多个连接二.演示示例:1.自定义编写node file2.自定义编写edge file3.自定义编写type fil

weixin_50632459的博客 5014

基于云开发搭建网络安全知识答题活动小程序v3.0

网络安全知识答题活动小程序v3.0,基于云开发的答题活动小程序。本项目技术栈基于 ES2015+、WXML、WXSS、JavaScript 、微信原生 API和云开发,所有的请求数据都使用云数据库的小程序端SDK进行查询,提前了解和学习这些知识会对使用本项目有很大的帮助。

mon_star°的博客 610

40分钟快速入门Dart基础(上)

针对final 和const 理解的有点模糊的可以参考这篇文章: 可以参考这里Flutter 知识梳理(Dart)-Dart中static final const 区别看是不是超级好上手,好操作~其实Dart的整个学习起来还是蛮简单的,对于有基础的老司机更简单一些。分分钟敲起来~这篇文章就简单的介绍到这里如何短时间快速入门Dart,避免入坑。由于是想让大家快速入门Flutter,所以针对上面的这些章节我们讲解的只是一些在开发Flutter 过程中常用的一些方法和函数。

qq_7813180 4569
上一篇: 【洛谷P4408】逃学的小孩【树的直径】
下一篇: 【USACO2.3】解题报告
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值