G. Counting Graphs(并查集)

2023-11-11

Problem - G - Codeforces

给定一个由n个顶点组成的树。树是一个无圈的连通无向图。树的每条边都有它的权重wi。

你的任务是计算满足以下四个条件的不同图形的数量:

 

Plain Text

 
图形没有自环和多重边。
图形的边上的权重是整数且不超过S。

图形只有一个最小生成树。
图形的最小生成树是给定的树。

如果两个图的边集不同,则被认为是不同的,考虑到边的权重。

答案可能很大,对998244353取模后输出。

输入:

第一行包含一个整数t(1≤t≤104),表示测试用例的数量。

每个测试用例的第一行包含两个整数n和S(2≤n≤2⋅105,1≤S≤109),表示顶点的数量和权重的上界。

接下来的n-1行描述了树的边,第i行包含三个整数ui,vi和wi(1≤ui,vi≤n,ui≠vi,1≤wi≤S),表示一条权重为wi的边。

保证所有测试用例中n的总和不超过2⋅105。

输出:

对每个测试用例,输出满足条件的不同图形的数量,对998244353取模后输出。

Example

Input

Copy

 

4

2 5

1 2 4

4 5

1 2 2

2 3 4

3 4 3

5 6

1 2 3

1 3 2

3 4 6

3 5 1

10 200

1 2 3

2 3 33

3 4 200

1 5 132

5 6 1

5 7 29

7 8 187

7 9 20

7 10 4

Output

Copy

1
8
80
650867886

题解:
既然是最小生成树,想想与最小生成树有关的算法,kruskal利用并查集,每次链接两个不在一个集合里面的点,最终使得整个图联通

假设我们现在有两个未在一个集合的集合s1,s2,最多需要s1*s2 - 1条边链接,为啥减一,因为不能有重边,这些边的取值范围x是多少,应该是w < x <= s

每条边有s - w种情况,但是我们也可以啥也不连,所以加一种情况为s - w + 1

每条边都可以这样

情况数为,(s - w + 1)^(s1*s2 - 1)种情况,每次链接两个不相连的集合,都会是这样,所以相乘

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
	int x,y,w;
}a[200040];
bool cmp(node a,node b)
{
	return a.w < b.w;
}
int f[200040],d[200043];
int find(int x)
{
	if(f[x] == x)
	return f[x];
	return f[x] = find(f[x]);
}
int mod = 998244353;
int qpow(int x,int p)
{
	int ans = 1;
	while(p)
	{
		if(p&1)
		ans = ans*x%mod;
		x = x*x%mod;
		p /= 2;
	}
	return ans;
}
void solve()
{
	int n,s;
	cin >> n >> s;
	for(int i = 1;i < n;i++)
	{
		int x,y,w;
		cin >> x >> y >> w;
		a[i] = {x,y,w};
	}
	for(int i = 1;i <= n;i++)
	{
		f[i] = i;
		d[i] = 1;
	}
	sort(a + 1,a + n,cmp);
	int ans = 1;
	for(int i = 1;i < n;i++)
	{
		int x = find(a[i].x);
		int y = find(a[i].y);
		ans = ans*qpow(s - a[i].w + 1,d[x]*d[y] - 1)%mod;
		f[y] = x;
		d[x] += d[y];
	}
	cout << ans <<"\n";
}
signed main()
{
	int t = 1;
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while(t--)
	{
		solve();
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

G. Counting Graphs(并查集) 的相关文章

  • 类和对象学习——构造方法!

    类和对象学习 构造方法 我们自己定义一个类 是为了创建这个类的对象 然后调用该类中方法 执行一系列代码 实现我们要的程序功能 我们创建这个类的对象怎么创建的 new 类的对象名 1 无参构造 用类名 做方法名的方法 是构造方法 1 什么是构

随机推荐

  • 大数据专栏-Hive插入数据时长时间卡住的问题分析过程及原因

    最近在进行hive案例教学时 某一个学生出现了一个很奇怪的问题 前期hadoop和hive的平台搭建没有任何问题 在hive建表练习时 前几次也是正常进行 但是在进行分组聚合时 出现了问题 问题现象 1 通过分组聚合查询 把查询结果插入到另
  • 一篇SSM框架整合友好的文章(一)

    2016 12 18 21 47 517人阅读 评论 0 收藏 举报 分类 java 16 版权声明 本文为博主原创文章 欢迎转载 转载请注明作者 原文超链接 博主地址 http blog csdn net forezp 目录 转载请标明出
  • 网络安全之DDos攻击

    一 DDoS 攻击究竟是什么 DDoS 攻击 全称是 Distributed Denial of Service 翻译成中文就是分布式拒绝服务 一般来说是指攻击者利用 肉鸡 对目标网站在较短的时间内发起大量请求 大规模消耗目标网站的主机资源
  • 高精度算法【加减乘除】

    全文目录 前言 高精度加法 操作步骤 代码模板 高精度减法 操作步骤 代码模板 高精度乘法 操作步骤 代码模板 高精度除法 操作步骤 代码模板 前言 在实际应用中 语言提供的数据类型的最大值或最小值可能不足以支撑我们所进行的运算 这时会导致
  • 论文写作参考文献 期刊标准缩写

    写论文时 经常疑惑参考文献的缩写是什么 反复的查看别人的参考格式 很麻烦 有参考文献期刊缩写大全方便了不少 Content is based on IEEEfull bib and IEEEabrv bib as of 2016 03 25
  • python中argparse

    关于argparse网上的资料好多 搞明白后自己整理下 方便以后查看 argparse 是python自带的命令行参数解析包 可以用来方便地读取命令行参数 它的使用也比较简单 1 基本框架 下面是采用argparse从命令行获取用户名 该p
  • centos7 pip2升级失败解决方法

    centos7 默认python版本是2 7 所以安装的pip也要支持py2 yum install python2 pip y 安装之后默认版本较低 pip 8 1 2 在提示升级时 可能会遇到我这种错误 pip install upgr
  • ssh+vscode remote显示x11

    本教程环境为 windows主机上安装vscode远程连接ubuntu linux服务器做开发 在vscode里面添加ssh主机即可实现远程开发 在服务器上需要安装相应的扩展 实现方法如下 step1 本地windows安装上x11显示软件
  • vue uniapp等动态添加类名

    1 对象形式 p 对象的形式 文字的颜色 p 2 对象形式 p 对象的形式 文字的颜色 p 3 三元表达式 p 三元表示式 文字的颜色 p 4 数组形式 p 数组的形式 文字的颜色 p 5 数组对象形式 p 数组中使用对象 文字的颜色 p
  • VSCode 搭建 STM32开发环境

    首先附上一张VS Code图 一直都喜欢这种 黑色主题感觉高大上 因为公司准备上市 所以不能使用Keil开发了 在这之前有在Linux上开发过STM32 于是想着在Windows上也搭建一个 这样方便跨平台 于是决定搭建一个用VSCode
  • 让你能进“大厂”的数据分析项目是长怎样?全套路线(建议收藏)

    算法 数据结构 全套路线 建议收藏 前言 所谓活到老 学到老 虽然我感觉自己已经学了很多算法了 但是昨天熬夜整理完以后发现 自己还是个弟弟 实在忍不住了 打算把 算法学习路线 发出来 我把整个算法学习的阶段总结成了五个步骤 分别为 基础语法
  • NLP模型笔记2022-09:hanlp所有预训练模型API接口使用

    目录 1 找出所有预训练模型 为后续训练模型准备 2 如何使用上述模型 2 1 以分词模型为案例 2 2 以分词 词性 实体识别 句法模型为统一的模型 参考文献 HanLP2 1支持包括简繁中英日俄法德在内的104种语言上的10种联合任务
  • Python安装报错:”ModuleNotFoundError:No module named _ctypes“ 的解决方案

    目录 第一步 下载安装包 第二步 执行安装 1 创建存放目录 2 运行脚本configure 3 make编译make install安装 4 最后运行make clean 第三步 创建软连接 总结安装过程 总结报错解决 第一步 下载安装包
  • 串口助手使用16进制发送数据

    目录 如何使用串口助手发送16进制数据 注意发送字节 连续发送 注意不要使用回车 如何使用串口助手发送16进制数据 错误示范 正确示范 注意发送字节 有些串口在16进制发送是必须这样 02 直接输入2发送不出去 如图 如何知道没有发送成功呢
  • MFC多线程各种线程用法 .

    一 问题的提出 编写一个耗时的单线程程序 新建一个基于对话框的应用程序SingleThread 在主对话框IDD SINGLETHREAD DIALOG添加一个按钮 ID为 IDC SLEEP SIX SECOND 标题为 延时6秒 添加按
  • Windows 7 下Maven的下载安装配置 (配置本地仓库及修改路径)

    环境 windows 7 64位 官网下载Maven 1 首先去官网 http maven apache org 进行下载 这里尽量不要选太高级的版本 选个稳定的版本就可以了 上面的两个箭头都可以进行选择 第一个箭头是代表最新的版本 这里我
  • 主存储器空间的分配和回收(原理及实现)

    内容 主存储器空间的分配和回收 目的 一个好的计算机系统不仅要有一个足够容量的 存取速度高的 稳定可靠的主存储器 而且要能合理地分配和使用这些存储空间 当用户提出申请存储器空间时 存储管理必须根据申请者的要求 按一定的策略分析主存空间的使用
  • 关于人脸识别的最全研究!

    来源 北京物联网智能技术应用协会 本文内容涵盖人脸识别发展历程 市场研究 核心技术 商业应用以及产业落地 个人看法等干货研究 注意 本文干货满满 约有2万7千字 强烈建议大家先收藏后学习 01 发展史 1 人脸识别的理解 人脸识别 Face
  • 面对多个offer,如何做选择?

    翻看了求职板块的很多内容 发现有很多应届毕业生面临着一个共性的问题 那就是同时面临多个offer时 该怎么选择 也是很纠结的一个问题 从一个生涯规划师的角度并结合个案咨询中的类似案例 提供几个视角 供有选择困惑的求职者做一些参考 希望对你们
  • G. Counting Graphs(并查集)

    Problem G Codeforces 给定一个由n个顶点组成的树 树是一个无圈的连通无向图 树的每条边都有它的权重wi 你的任务是计算满足以下四个条件的不同图形的数量 Plain Text 图形没有自环和多重边 图形的边上的权重是整数且