G. Counting Graphs Codeforces Round 891 (Div. 3) 1857G

news2024/11/23 19:08:07

Problem - G - Codeforces

题目大意:给出一棵n个点的边权树,问有多少个边权最大不超过s的图的最小生成树是这棵树

2<=n<=2e5;1<=w[i]<=1e9

思路:对于最小生成树上的每一条边,如果我们在包含这条边的链上的两点之间加了一条边权小于等于这条边的边权的边,最小生成树就可以走那条新边,同时我们也不能加点,所以对于一条边权为w[i]的边,我么只能在树上添加边权为w[i]+1~s的边,所以算上不加边,边权一共有s-w[i]+1种情况。

然后考察有多少位置可以加边,如果随机访问边的话,我们不知道当前加的边是否会影响其他的边,所以我们要从边权小的边开始遍历,加的边都应该在经过这条边的链上的两点之间,且边权大于当前边,这样就可以确保不影响其他的边。

因为我们已经算出了每个位置能加边的种类数,所以我们现在只要算出有多少个位置能加边即可,设我们当前遍访问的边的两个端点分别为u,v,我们要加的边应该一个端点在u的子树上,另一个在v的子树上,在我们当前确定的边权和位置条件下,u的子树上的每一个点都可以向v的子树上的每一个点建边,除了我们本身正在访问的边,总的位置数就是size[u]*size[v]-1,每一条边提供的贡献也就是(s-w[i]]+1)^{size[u]*size[v]]-1}

我们可以用并查集维护当前访问过的边,在unite时连带维护每个点的子节点数量,对于每个边都考差它在当前连通出的图中能建多少图,这样加的边在我们的边权和位置限制条件下是不会英霞其他边的,累加答案即可

#include<bits/stdc++.h>
//#include<__msvc_all_public_headers.hpp>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int n;
ll siz[N];
pair<ll,pair<int,int>> e[N];
int fa[N];
int lv[N];
const ll MOD = 998244353;
void init()
{
	for (int i = 0; i <= n; i++)
	{
		siz[i] = 1;
		fa[i] = i;
		lv[i] = 0;
	}
}
int find(int x)
{//并查集找祖先
	return fa[x] == x ? x : find(fa[x]);
}
void unite(int a, int b)
{//并查集的合并
	int x = find(a);
	int y = find(b);
	if (lv[x] < lv[y])//路径压缩
		swap(x, y);
	fa[y] = x;
	siz[x] += siz[y];
	if (lv[x] == lv[y])
	{
		lv[x]++;
	}
}
ll qpow(ll a, ll b)
{//快速幂
	ll ret = 1;
	while (b)
	{
		if (b & 1)
		{
			ret = ret * a % MOD;
		}
		a = a * a % MOD;
		b >>= 1;
	}
	return ret;
}
int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	int t;
	cin >> t;
	while (t--)
	{
		ll s;
		cin >> n >> s;
		init();
		for (int i = 1; i < n; i++)
		{
			int u, v;
			ll w;
			cin >> u >> v >> w;
			e[i] = {w, {u,v} };
		}
		sort(e + 1, e + n);
		ll ans = 1;
		for (int i = 1; i < n; i++)
		{
			int u = find(e[i].second.first);
			int v = find(e[i].second.second);//当前边两端点所在的连通块
			ans = ans * qpow(s - e[i].first + 1, siz[u] * siz[v] - 1)%MOD;//可选边权数(包括无这条边),两端点所在连通块大小相乘-1
			unite(u, v);
		}
		cout << ans << endl;
	}
	return 0;
}

 

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

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

相关文章

SpringBoot 该如何预防 XSS 攻击

XSS 漏洞到底是什么&#xff0c;说实话我讲不太清楚。但是可以通过遇到的现象了解一下。在前端Form表单的输入框中&#xff0c;用户没有正常输入&#xff0c;而是输入了一段代码&#xff1a;</input><img src1 onerroralert1> 这个正常保存没有问题。问题出在了列表…

建设数字化工厂管理系统的必要性有哪些

随着科技的不断发展&#xff0c;数字化已经深入到各个行业和领域&#xff0c;其中包括制造业。数字化工厂管理系统作为一种先进的生产管理模式&#xff0c;能够提高生产效率&#xff0c;降低生产成本&#xff0c;提升企业的竞争力。下面&#xff0c;我们就来探讨一下建设数字化…

Mysql按小时进行分组统计数据

目录 前言 按1小时分组统计 按2小时分组统计 按X小时分组统计 前言 统计数据时这种是最常见的需求场景&#xff0c;今天写需求时发现按2小时进行分组统计也特别简单&#xff0c;特此记录下。 按1小时分组统计 sql&#xff1a; select hour(pass_time) …

自建hexo博客并将原有的文章发布其上

1、保存粘贴到memo9中的博客文章&#xff0c;并将txt转换成word文档 varPowerShellPath, CommandLine: string; // , ScriptPath begin//save to txtMemo9.Lines.SaveToFile(test.txt);memo10.Lines.SaveToFile(txt2word.ps1);//save as docxPowerShellPath : powershell.exe…

Simulink仿真模块 - Math Function

Math Function:执行数学函数 在仿真库中的位置为:Simulink / Math Operations HDL Coder / Math Operations 模型为: 双击模型打开参数设置界面,如图所示: 说明 Math Function 模块可执行许多常见的数学函数。 提示 要执行平方根计算,请使用Sqrt模块。 …

QGIS二次开发四:实现图层列表

在实际开发中我们通常会遇到同时显示多个图层&#xff0c;并且还要实时显示和隐藏各图层的需求&#xff0c;如同 ArcGIS 的图层列表那样&#xff0c;界面左侧显示图层列表&#xff0c;列出当前已加载的所有图层&#xff0c;同时每个图层前面有复选框可以控制图层的显示/隐藏&am…

虾皮运营每天需要做什么?如何处理后台数据?

#shopee#​有很多朋友想做电商&#xff0c;但是对电商运营比较朦胧&#xff0c;不知道电商运营每天到底该做些什么。今天咱们就来解析下&#xff0c;Shopee电商运营每天该做哪些事情一个合格的电商运营&#xff0c;每天都会做好以下几点&#xff1a; 一、查看数据&#xff1a; …

echarts自动轮播tooltip

1. 将自动轮播的工具函数封装到 utils/echart-tooltip-carousel.js /*** echarts自动轮播tooltip* param {Object} chart echart实例* param {Number} num 轮播数量* param {Number} time 轮播间隔时间*/ export function loopShowTooltip(chart, num20, time2000) {let count…

如何配置一个永久固定的公网TCP地址来SSH远程树莓派?

文章目录 如何配置一个永久固定的公网TCP地址来SSH远程树莓派&#xff1f;前置条件命令行使用举例&#xff1a;修改cpolar配置文件 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 …

IoT 物联网安全事件的持续检测和监控解决方案

对于IoT物联网安全事件的持续检测和监控&#xff0c;可以采用以下解决方案&#xff1a; 设备管理和漏洞修复&#xff1a;确保设备的固件和软件及时更新&#xff0c;并修补已知的漏洞。建立一个设备清单&#xff0c;并定期审查和更新其中的设备。 流量分析和异常检测&#xff1a…

蓝牙资讯|苹果发布AirPods最新开发者固件,最新功能引人关注

苹果面向 AirPods 耳机发布了开发者固件更新 AirPods 6.0 Beta 3&#xff0c;最新内部版本号为 6A5289c。 本次更新适用于 AirPods 3、AirPods Pro 2 和 AirPods Max&#xff0c;不过并非所有 AirPods 耳机都获得了更新。包含5 种新功能 / 新特性&#xff1a; 自适应音频&am…

virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址

安装好openEuler后,设置远程登入前,必不可少的一步,主机与虚拟机之间的通信要解决,下面给出详细步骤: 第一步:检查虚拟机适配器模式:桥接模式 第二步:登入虚拟机修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 没有vim的安装或者用vi代替:sudo dnf …

【实操干货】如何开始用Qt Widgets编程?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 在本文中&#xff0…

代理模式——静态代理与动态代理

代理模式 代理模式允许你为其他对象提供一个代理&#xff0c;以控制对这个对象的访问。代理模式在不改变实际对象的情况下&#xff0c;可以在访问对象时添加额外的功能。 可以理解为代理模式为被代理对象创造了一个替身&#xff0c;调用者可以通过这个替身去实现这个被代理对…

【高危】Microsoft Office Visio 远程执行代码漏洞

漏洞描述 Microsoft Office Visio 是微软公司开发的一款流程图和矢量图绘制工具。 Microsoft Office Visio 受影响版本中&#xff0c;当解析攻击者恶意制作的Visio文件时&#xff0c;攻击者可以在应用程序上下文执行任意代码。 漏洞名称Microsoft Office Visio 远程执行代码…

大厂容器云实践之路(四)

7-爱奇艺基于 Docker 的 App Engine 实践 背景 业务上 虚机承载的业务&#xff1a; 后台服务&#xff1a;25% worker&#xff1a;20% 其他&#xff1a;55% 技术上 2014年第三季度 出发点 目标 道路曲折 用户受益 • 资源到位快 • 部署快&#xff08;上线、升级&…

神码ai伪原创文章生成器软件【php源码】

大家好&#xff0c;本文将围绕python二级用哪个版本的软件展开说明&#xff0c;二级python 值不值得考是一个很多人都想弄明白的事情&#xff0c;想搞清楚python二级用什么软件需要先了解以下几个事情。 火车头采集ai伪原创插件截图&#xff1a; 问题一&#xff1a;安装python…

小红书攻略:爆款引流,如何在激烈竞争中脱颖而出?

小红书&#xff08;RED&#xff09;作为国内最具影响力的社交电商平台之一&#xff0c;是很多品牌运营者的首选之一。然而&#xff0c;在小红书的激烈竞争中&#xff0c;如何快速引流、吸引关注&#xff0c;成为了品牌运营者面临的挑战。本篇文章一秒推小编将为您介绍小红书运营…

【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统

&#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 在现代的软件开发中&#xff0c;微服务架构已经成为了一个热门的话题。微服务架构的一个关键组成部分就是服务发现。而在服务发现领域&#xff0c;Eureka无疑是一个备受推崇的解决方案。本篇博客将为您介绍什么是E…

MATLAB|信号处理的Simulink搭建与研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…