E. Sergey and Subway(思维 + dp)

news2025/1/16 15:58:13

Problem - E - Codeforces

Sergey Semyonovich 是 N 市县的市长,他一直在思考如何进一步改善 Nkers 的生活。不幸的是,几乎所有可以做的事情都已经完成了,白天他已经没有更多的想法(他现在喜欢在晚上睡觉)。然而,他的助手们已经找到了一个解决方案,他们在纸张上绘制了一座虚构的城市,并建议市长可以提出其改进意见。

现在,他手头有一张包含 n 个地铁站的虚构城市地图。有些站点之间通过隧道直接相连,使整张地图成为一棵树(助手们时间和热情均不足)。这意味着每对站点之间存在仅有一条简单路径。如果一条路径只使用每条隧道不超过一次,则称其为简单路径。

Sergey Semyonovich 最喜欢的质量目标之一是所有站点之间的两两距离之和。两个站点之间的距离是它们之间路径上可能的隧道数量的最小值。

Sergey Semyonovich 决定在地铁图上添加新的隧道。特别地,他连接了原来没有直接隧道相连但有共同邻居的任意两个站点 u 和 v,也就是说,存在一个站点 w,使得原来的地图中 u 和 w 之间存在一条隧道,w 和 v 之间存在一条隧道。现在请你计算新地图中所有站点对之间距离的总和。

输入格式 第一行包含一个整数 n (2≤n≤200000) — 市长助手们绘制的虚构城市中地铁站点的数量。接下来 n−1 行,每行包含两个整数 ui 和 vi (1≤ui,vi≤n,ui≠vi),表示这两个索引号的站点通过直接隧道相连。

保证这 n 个站点和 n−1 条隧道形成一棵树。

输出格式 输出一个整数,表示 Sergey Semyonovich 在原始地图上为所有具有共同邻居但没有直接连接的站点之间添加新的隧道后,所有站点对之间距离的总和。

Examples

input

Copy

4
1 2
1 3
1 4

output

Copy

6

input

Copy

4
1 2
2 3
3 4

output

Copy

7

题解:
通过我们划图发现,如果按题目中那样加边,原来两点距离为一的距离还为一,

(按照我的错误想法,距离不为1的,减1的贡献即可,但是不是这样的,我举得例子点数太少,不具有代表性)

实际应该是

 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int,int> PII;
int mod = 1e9 + 7;
vector<int> p[200050];
int dp[200050];
int ans = 0;
int cnt = 0;
void dfs(int x,int fa,int deep)
{
	dp[x] = 1;
	if(deep&1)
	cnt ++;
	for(auto ne:p[x])
	{
		if(fa == ne)
		{
			continue;
		}
		dfs(ne,x,deep + 1);
		dp[x] = dp[ne] + dp[x];
		
	}
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i < n;i++)
	{
		int x,y;
		cin >> x >> y;
		p[x].push_back(y);
		p[y].push_back(x);
	}
	dfs(1,0,0);
	for(int i = 2;i <= n;i++)
	{
		ans += dp[i]*(n - dp[i]);
	}
	ans = ans - (ans - cnt*(n - cnt))/2;
	cout << ans;
}

signed main()
{
//	ios::sync_with_stdio(0 );
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

1~5的距离不加额外边应该是4,加了只后变成了2,

2~5的距离不加额外边是3,加了后变成2

其实就是所有的距离变成(c + 1)/2

首先原图的距离很好求,可以通过求每个点子节点的个数*(n - 子节点的个数相加求到,代表每条边对距离的贡献

那如何减去加边后的贡献呢,我们可以把点数分为,深度在奇偶层,只有奇偶层间的距离永远是1 + 一个偶数(可能是0),由于1是不会改变的,我们相当于把所有无法删去的1给减去了,剩下距离整除2即可

我们的到奇偶层对数为cnt*(n - cnt)

答案就为ans - (ans - cnt*(n - cnt))/2 

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

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

相关文章

MySQL 中的 distinct 和 group by 的区别

目录 distinct用法distinct多列去重 group by的使用单列去重多列去重 distinct和group by原理隐式排序基于上述原因&#xff0c;Mysql在8.0时&#xff0c;对此进行了优化更新&#xff1a; 结论推荐group by的原因 在语义相同&#xff0c;有索引的情况下&#xff1a;group by和d…

体验 Whisper

体验 Whisper 1. 什么是 Whisper2. Github 地址3. 创建虚拟环境4. 安装 ffmpeg5. 部署 Whisper6. 使用 Whisper 1. 什么是 Whisper Whisper 是一个通用的语音识别模型。它是在一个大型的不同音频数据集上训练出来的&#xff0c;也是一个多任务模型&#xff0c;可以进行多语言语…

MySQL笔记(一):设计范式、基础概念、数据库定义语言DDL

MySQL设计范式、基础概念、数据库定义语言DDL MySQL设计范式、基础概念、数据库定义语言DDL MySQL设计范式、基础概念、数据库定义语言DDL数据模型属性的特点 数据库的创建主键 数据库设计规范第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式…

智能制造之路-从MES到MOM

当前&#xff0c;中国正在大力推动制造业的转型升级&#xff0c;实现由传统制造向智能制造转型。而制造信息化系统&#xff0c;作为支撑企业实现智能制造的一个关键因素&#xff0c;也正越来越多的吸引企业领导人的关注。 某大型制造业集团企业&#xff08;下文简称M集团&…

【Java虚拟机】JVM日志分析和可视化工具实操

1.JVM垃圾GC日志参数配置实战 Java虚拟机中垃圾收集器在运行过程中输出的日志信息主要用于分析垃圾收集器的运行状态、优化垃圾收集器的工作效率以及定位垃圾收集相关的问题GC日志会包含以下内容 垃圾收集器的名称和版本信息。垃圾收集器的运行时间、开始时间和结束时间。垃圾…

【Fluent】利用TUI命令在保存或导出文件时,给文件名加上时间步长、流动时间、迭代步数等求解过程变量的自动编码

一、问题背景 在CSDN的一篇博客&#xff08;从Fluent导出数据到txt文档&#xff09;中&#xff0c;一位博主分享了一串导出求解数据的TUI命令。 file/export/ascii data%t.txt () yes h2s y-velocity x-velocity q no 当时我不知道里面的%t是啥意思&#xff0c;估计是跟时间…

JMeter介绍与安装教程

简介 JMeter是一款开源的负载测试工具&#xff0c;它可以用于测试Web应用程序、API、数据库、负载均衡器等。JMeter 是由 Apache 软件基金会开发的&#xff0c;其目标是提供一个高性能、易于使用的负载测试工具。 JMeter 具有以下特点&#xff1a; 可扩展性&#xff1a;JMet…

又开发好一个系统,详细记录软著申请过程

经过几个通宵达旦的撸代码之后&#xff0c;又开发好了一个系统&#xff0c;和以往一样&#xff0c;系统开发好了少不了申请软件著作权证书&#xff0c;兄弟们&#xff0c;软著申请搞起来啊。 在版权保护中心后台提交资料&#xff0c;没有账号的需要先注册一个账号。很重要的一步…

停车场收费系统

1.系统的开发工具 1.1 AppServe集成应用 Mysql&#xff1a;MySQL 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持&#xff0c;由 MySQL 的初始开发人员 David Axmark 和 Mi…

【网络技术】什么是CIDR

序言 世界上最幸福的事之一&#xff0c;莫过于经过一番努力后&#xff0c;所有东西正慢慢变成你想要的样子。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 1 基础介…

【设计模式】单例模式(懒汉和饿汉模式详解)

目录 1.设计模式是什么&#xff1f; 2.单例模式 1.概念&#xff1a; 2.如何设计一个单例 1.口头约定&#xff08;不靠谱&#xff09; 2.使用编程语言的特性来处理 3.使用"饿汉模式"设计单例 1.详细步骤 2.完整代码 4.使用"饿汉模式"设计单例 1.详…

php+vue在线课程教育学习考试系统864t7

运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat/phpmyadmin功能要求&#xff1a;可以实现首页、个人中心、学生管理、名…

嵌入式软考备考_7 系统开发过程和项目管理

系统开发过程和项目管理 开发模型 把开发过程分成一些阶段。 瀑布模型&#xff1a;SDLC。缺陷在于最开始需求要明确&#xff0c;但是开发周期很难不变动。 因此改进&#xff1a; 原型&#xff1a;一个demo。 快速原型模型&#xff1a;抛弃模型&#xff0c;一旦获取到了用户需…

unity 基本寻径

一、实现效果&#xff1a;敌人追逐玩家&#xff0c;自动躲避障碍物 二、游戏框架 Plane&#xff1a;平面&#xff0c;是玩家和敌人可以行走的区域 Player&#xff1a;玩家&#xff0c;可以在平面上移动&#xff0c;绕开障碍物 Enemy&#xff1a;敌人&#xff0c;可以追逐玩家…

红外遥控且自动避障的嵌入式智能小车系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本次实验使用树莓派作为开发平台&#xff0c;AlphaBot 作为开发载体&#xff0c;Python 作为开发语言&#xff0c;开发一种基于红外线遥控控制的、可自动避障的嵌入式智能小车系统。 智能系统中的嵌入式应用 实验目的 嵌入式…

MySQL双写缓冲区(Doublewrite Buffer)

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录 摘要为什么需要Doublewrite BufferDoublewrite Buffer原理Doublewrite Buffer相关参数总结 摘要 InnoDB是MySQL中一种常用的事务性存储引擎&#xff0c;它具有很多优秀的特性。其中&#xff0c;Dou…

pip的常用操作命令

1. 忽略已安装的库&#xff08;以llvmlite为例&#xff09; pip install xxx --ignore-installed llvmlite 2. 错误 - AttributeError: int object has no attribute endswith 解决方案&#xff1a; 常见原因因为使用的pip为pip2&#xff0c;可以使用 pip -V 查看pip版本&a…

springboot+vue校园博客系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园博客系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

AD 域环镜 本地管理员密码解决方案(LAPS)部署

前言&#xff1a; 我们知道window10装好后&#xff0c;默认本地管理员账号Administrator是关闭的&#xff0c;通过组策略启用本地管理员账号没有问题&#xff0c;具体方法在下面&#xff0c;但是由于微软《MS14-025&#xff1a;组策略首选项中的漏洞可能允许特权提升&#xff…

06-引入SpringSecurity 尚筹网

SpringSecurity 框架用法简介 用户登录系统时我们协助 SpringSecurity 把用户对应的角色、权限组装好&#xff0c;同时把各个资源所要求的权限信息设定好&#xff0c;剩下的“登录验证”、“权限验证”等等工作都交给SpringSecurity。 权限管理过程中的相关概念 主体 英文单…