Triples of Cows

题目传送门

模拟赛 T 4 T4 T4 , 变换挺妙的, 而且感觉转换后问题就迎刃而解了

解法

强行模拟拆点重连边显然不行,会让图的边数达到 n 2 n^2 n2 级别的
——————————————————————————————————————————————————
考虑转化:在每一条边上新建一个虚点,
例如 第 i i i 条边 u − v u-v uv ,我们建一个虚点 n + i n+i n+i 并将原边变为两条边 u   −   n + i , n + i   −   v u\ -\ n+i,n+i \ - \ v u  n+i,n+i  v
发现转化后,对于删除 i i i 点的操作,只需将 i i i 删除并且合并虚点即可 ,图的形态仍是一颗树,就比较好处理了
——————————————————————————————————————————————————
考虑答案的计算 :需要分类讨论一下
首先我们记 原图编号 ≤ n \le n n 的点为实点(与虚点相对应), f u f_u fu u u u 的一级儿子的个数, g u g_u gu u u u 的二级儿子的个数, h u h_u hu u u u 的三级儿子的个数
对答案的贡献的情形分三种,记贡献为 Δ \Delta Δ
1.

在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述

将三种贡献加起来就有:
A n s = ∑ i = 1 n g i 2 − ∑ i = n + 1 n ∗ 2 + 1 f i ( f i − 1 ) ( f i + 1 ) − f i 2 + 2 f i h i Ans=\sum_{i=1}^{n} g_i^2 -\sum_{i=n+1}^{n*2+1} f_i (f_{i}-1)(f_i+1)-f_i^2+2f_ih_i Ans=i=1ngi2i=n+1n2+1fi(fi1)(fi+1)fi2+2fihi
合并虚点时用并查集维护并更新 f , g , h f,g,h f,g,h 的值

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>

using ll = long long;
using namespace std;
const int N = 5e5 + 7;

int n;
vector<int> G[N];
ll f[N],g[N],h[N],fa[N],a[N];

int find(int x) {  return x==a[x]?x:a[x]=find(a[x]);  }

void dfs(int u,int ff) {
	fa[u]=ff;
	for(int v:G[u]) if(v!=ff) {
		dfs(v,u);
		if(u<=n) {
			g[u] += f[v] ;
		}else {
			++f[u] ;
			h[u] += g[v] ;
		}
	}
}

void work() {
	ll ans=0;
	for(int i=1;i<=n;i++) 
		ans += g[i]*g[i] ;
	for(int i=n+1;i<=(n<<1)-1;i++) 
		ans+=(f[i]*(f[i]+1)*(f[i]-1) - f[i]*f[i] + 2*f[i]*h[i]) , a[i] = i ;
	
	printf("%lld\n" , ans) ;
	for(int u=1;u<n;u++) {
		int x,y,z; x=find(fa[u]); y=fa[x]; z=find(fa[y]); // 最多影响往上3代
		ans-= g[u]*g[u] ;
		ans-=(f[x]*(f[x]+1)*(f[x]-1) - f[x]*f[x] + 2*f[x]*h[x]) ;
		ans-= g[y]*g[y];
		if(z) ans-=(f[z]*(f[z]+1)*(f[z]-1) - f[z]*f[z] + 2*f[z]*h[z]) ;
		--f[x],--g[y] ;
		if(z) --h[z];
		for(int v:G[u]) if(v!=fa[u]) {
			a[v] = x;
			f[x] += f[v]; h[x] -= f[v]; //三代变一代
			g[y] += f[v];
			h[x] += h[v];
			if(z) h[z]+=f[v] ;
			ans-=(f[v]*(f[v]+1)*(f[v]-1) - f[v]*f[v] + 2*f[v]*h[v]) ;
		}
		ans+= (f[x]*(f[x]+1)*(f[x]-1) - f[x]*f[x] + 2*f[x]*h[x]) ;
		ans+= g[y]*g[y];
		if(z) ans+=(f[z]*(f[z]+1)*(f[z]-1) - f[z]*f[z] + 2*f[z]*h[z]) ;
		
		printf("%lld\n" , ans) ;
	}
}

int main() {
    scanf("%d",&n);
    for(int i=1;i<n;i++) {
    	int u,v; scanf("%d%d",&u,&v);
    	G[u].push_back(n+i); G[n+i].push_back(v);
    	G[v].push_back(n+i); G[n+i].push_back(u);
	}
	dfs(n,0);
	work();
}

额,代码实现还是需要一点经验的,小看它了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫怎么翻页 ?

首先&#xff0c;你需要安装相关的库。在你的命令行窗口中&#xff0c;输入以下命令来安装所需的库&#xff1a; pip install requests beautifulsoup4然后&#xff0c;你可以使用以下代码来爬取网页内容并翻页&#xff1a; package mainimport ("fmt""net/htt…

米软科技 | 推进医院智慧管理分级评估体系建立、提升评级

国家卫生健康委办公厅于2021年3月15日发布了“关于印发医院智慧管理分级评估标准体系&#xff08;试行&#xff09;的通知”&#xff08;国卫办医函〔2021〕86 号&#xff09;&#xff0c;该评估体系用于指导医疗机构科学、规范开展智慧医院建设&#xff0c;提升医院管理精细化…

[黑马程序员Pandas教程]——Pandas缺失值处理

目录&#xff1a; 学习目标空值和缺失值查看缺失值 加载数据并通过info函数初步查看缺失值情况df.isnull().sum()空值数量统计Missingno库对缺失值的情况进行可视化探查 安装missingno库missingno.bar(df)缺失值数量可视化missingno.matrix(df)缺失值位置的可视化missingno.he…

【23-24 秋学期】NNDL 作业7 基于CNN的XO识别

一、用自己的语言解释以下概念 局部感知、权值共享池化&#xff08;子采样、降采样、汇聚&#xff09;。会带来那些好处和坏处&#xff1f;全卷积网络&#xff08;课上讲的这个概念不准确&#xff0c;同学们查资料纠正一下&#xff09;低级特征、中级特征、高级特征多通道。N输…

Java提高与实践

IO流 IO流概述 文件字节输入流&#xff1a;每次读取一个字节 package fileStream;import java.io.*;public class HelloFileInputStream {public static void main(String[] args) throws IOException {//创建文件字节输入流 管道&#xff0c;与源文件接通//写法一//InputStr…

getid3 获取视频时长

1、首先&#xff0c;我们需要先下载一份PHP类—getid3https://codeload.github.com/JamesHeinrich/getID3/zip/master 2.我在laravel6.0 中使用 需要在composer.json 自动加载 否则系统访问不到 在命令行 执行 composer dump-autoload $getID3 new \getID3();//视频文件需要放…

『 C++类与对象 』多继承与虚继承

文章目录 ⌨️多继承的概念语法 &#x1f5b1;️ ⌨️棱形继承⌨️虚继承虚继承是如何解决数据冗余和二义性的(不谈虚表概念)?&#x1f5b1;️ ⌨️多继承的概念 多继承指的是一个派生类是由多个基类继承而来的; 而在生活当中也有类似的例子:番茄既可以是水果,也可以是蔬菜;…

内核移植笔记 Cortex-M移植

常用寄存器 PRIMASK寄存器 为1位宽的中断屏蔽寄存器。在置位时&#xff0c;它会阻止不可屏蔽中断&#xff08;NMI&#xff09;和HardFault异常之外的所有异常&#xff08;包括中断&#xff09;。 实际上&#xff0c;它是将当前异常优先级提升为0&#xff0c;这也是可编程异常/…

K8S知识点(五)

&#xff08;1&#xff09;资源管理介绍 Pod控制器的作用&#xff0c;就是为了最终产生各种各样的Pod&#xff0c;Pod里面运行容器&#xff0c;容器里面运行程序 程序需要数据持久化&#xff0c;可以用数据存储卷来存储 Pod想要让外部访问需要通过Service代理&#xff0c;外部…

SAP-PP-报错:工作中心 7333_JQ 工厂 7331 对任务清单类型 N 不存在

创建工艺路线时报错&#xff1a;工作中心 7333_JQ 工厂 7331 对任务清单类型 N 不存在&#xff0c; 这是因为在创建工作中心时未维护控制键值导致的

latex加密符号怎么打|同态加密|Paillier

最近在写论文的时候遇到了一点阻碍&#xff0c;因为论文中需要用到paillier加密算法&#xff0c;想用一个公式表达加密的过程&#xff0c;但是不知道怎么打加密符号。 加密符号如下所示&#xff1a; 其中a是被加密的数字 $[\![a]\!] $ 公式&#xff1a; \begin{equation} …

【编程语言发展史】SQL的发展历史

目录 目录 SQL概述 SQL发展历史 SQL特点 SQL基本语句 SQL是结构化查询语言(Structure Query Language)的缩写&#xff0c;它是使用关系模型的数据库应用语言&#xff0c;由IBM在70年代开发出来&#xff0c;作为IBM关系数据库原型System R的原型关系语言&#xff0c;实现了…

单链表详解

今天我们继续来学习我们的链表&#xff0c;今天我们来学习单链表&#xff0c;什么是单链表呢&#xff0c;我们逻辑结构上可以认为是下面这个图。 然后我们结构体的定义就是下面这个 typedef int SLDateType; typedef struct SList {SLDateType x;struct SList* next; }SL;为什么…

(14)学习笔记:动手深度学习(Pytorch神经网络基础)

文章目录 神经网络的层与块块的基本概念自定义块 问答 神经网络的层与块 块的基本概念 以多层感知机为例&#xff0c; 整个模型接受原始输入&#xff08;特征&#xff09;&#xff0c;生成输出&#xff08;预测&#xff09;&#xff0c; 并包含一些参数&#xff08;所有组成层…

vue3 开启 https

1、安装mkcert证书创建器 npm i mkcert -g 2、检验是否安装成功 mkcert --version 有版本好出现则成功 3、创建证书颁发机构 mkcert create-ca 会在当前目录生成&#xff0c;ca.crt 和 ca.key 两个文件 4、创建证书 mkcert create-cert 会在当前目录生成&#xff0c;…

【2023.11.6】OpenAI发布会——近期chatgpt被攻击,不能使用

OpenAI发布会 写在最前面发布会内容GPT-4 Turbo 具有 128K 上下文函数调用更新改进了指令遵循和 JSON 模式可重现的输出和对数概率更新了 GPT-3.5 Turbo 助手 API、检索和代码解释器API 中的新模式GPT-4 Turbo 带视觉DALLE 3文字转语音 &#xff08;TTS&#xff09;收听语音样本…

Linux第一个小程序进度条

缓冲区 ​ 在写进度条程序之前我们需要介绍一下缓冲区&#xff0c;缓冲区有两种&#xff0c;输入和输出缓冲区&#xff0c;这里主要介绍输出缓冲区。在我们用C语言写代码时&#xff0c;输出一些信息&#xff0c;实际上是先输出到输出缓冲区里&#xff0c;然后才输出到我们的显…

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

3D全景技术,为我们打开全新宣传领域

随着科技的发展&#xff0c;3D全景技术正在融入我们的生活&#xff0c;这种全新视觉体验方式为我们打开了一扇全新的宣传领域&#xff0c;可以让我们多方位、多视角地探索各个行业&#xff0c;无论是对教育、商业、还是其他领域&#xff0c;都产生了深远的影响。 3D全景技术结合…

【云备份|| 日志 day5】文件热点管理模块

云备份day5 热点管理模块 热点管理模块 服务器端的热点文件管理是对上传的非热点文件进行压缩存储&#xff0c;节省磁盘空间。 而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内&#xff0c;比如如果一个文件一天都没有被访问过我们就认为这是一个非…