题目描述

给定一棵最小生成树,求有多少张图的最小生成树是给定的树,并且这张图的所有边边权不超过 \(S\)。

思路

考虑在最小生成树中加边。

我们回顾一下 Kruskal 的过程:

  1. 找到没被用过的,最小的边
  2. 判断这条边的两端是否在一个联通块中
  3. 加入这条边,将两端的联通块连在一起

根据第三条,我们可以得出一个结论:只要在加边时,保证加入的边是给定的边,这张图的最小生成树就一定是给定的树。

因此,在这两个联通块之间加任意一条大于给定边的边,最小生成树肯定不变。

设联通块 \(1\) 有 \(a\) 个元素,联通块 \(2\) 有 \(b\) 个元素,给定边长度为 \(w\),那么两个联通块中的点对就有 \(a\times b -1\) 对(最小生成树里的那对不算),每对点对有不连边、连一条权值为 \(w+1\) 的边、连一条权值为 \(w+1\) 的边 . . . 连一条权值为 \(S\) 的边,一共 \(S-w+1\) 种连法,\(ans=ans\times (S-w+1)^{a+b-1}\)。

跑一遍最小生成树,维护每个联通块的 \(size\) ,再统计答案即可。

没注释的 Code

#include <bits/stdc++.h>
#define int long long
using namespace std; struct Edge{
int u,v,w;
}E[200005];
int T,N,S,X,Y,Z;
int ans; int Power(int base,int power){
int res=1;
while(power){
if(power&1) res=(res*base)%998244353;
base=(base*base)%998244353;
power>>=1;
}return res;
} int fa[200005],sz[200005];
int Find(int x){return x==fa[x]?x:fa[x]=Find(fa[x]);} int Kruskal(){
ans=1;
for(int i=1;i<=N;i++) fa[i]=i,sz[i]=1;
for(int i=1;i<N;i++){
int u=E[i].u;
int v=E[i].v;
int w=E[i].w;
int a=Find(u);
int b=Find(v);
if(a!=b){
if((w+1)<=S) ans=ans*Power(S-w+1,sz[a]*sz[b]-1)%998244353;
sz[b]+=sz[a];
fa[a]=b;
}
}return ans;
} signed main()
{
scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&N,&S);
for(int i=1;i<N;i++){
scanf("%lld%lld%lld",&E[i].u,&E[i].v,&E[i].w);
}sort(E+1,E+N,[](Edge a,Edge b){return a.w<b.w;});
printf("%lld\n",Kruskal());
}
return 0;
}

CF1857G Counting Graphs 题解的更多相关文章

  1. 【SP26073】DIVCNT1 - Counting Divisors 题解

    题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...

  2. P4778 Counting Swaps 题解

    第一道 A 掉的严格意义上的组合计数题,特来纪念一发. 第一次真正接触到这种类型的题,给人感觉好像思维得很发散才行-- 对于一个排列 \(p_1,p_2,\dots,p_n\),对于每个 \(i\) ...

  3. Atcoder Beginner Contest ABC 284 Ex Count Unlabeled Graphs 题解 (Polya定理)

    题目链接 弱化版(其实完全一样) u1s1,洛谷上这题的第一个题解写得很不错,可以参考 直接边讲Polya定理边做这题 问题引入:n颗珠子组成的手串,每颗珠子有两种不同的颜色, 如果两个手串能够在旋转 ...

  4. POJ 2386 Lake Counting 搜索题解

    简单的深度搜索就能够了,看见有人说什么使用并查集,那简直是大算法小用了. 由于能够深搜而不用回溯.故此效率就是O(N*M)了. 技巧就是添加一个标志P,每次搜索到池塘,即有W字母,那么就觉得搜索到一个 ...

  5. [luogu7418]Counting Graphs P

    参考[luogu7417],同样求出最短路,得到二元组$(x,y)$并排序,记$tot_{(x,y)}$为$(x,y)$的数量 其中所给的两个条件,即分别要求: 1.$(x,y)$只能和$(x\pm ...

  6. CF908A New Year and Counting Cards 题解

    Content 有 \(n\) 张卡牌,每张卡牌上只会有大小写字母和 \(0\sim 9\) 的阿拉伯数字.有这样一个描述:"如果卡牌正面写有元音字母(\(\texttt{A,E,I,O,U ...

  7. CF335E Counting Skyscrapers 题解

    提供一种最劣解第一且巨大难写的做法( Bob 显然真正的楼量可以达到 \(314!\),是没办法直接做的,再加上唯一方案的样例,可以猜测有简单的结论. 考虑当楼高度为 \(k(k<h)\) 时, ...

  8. The 2013 South America/Brazil Regional Contest 题解

    A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Atta ...

  9. 【题解】Counting D-sets(容斥+欧拉定理)

    [题解]Counting D-sets(容斥+欧拉定理) 没时间写先咕咕咕. vjCodeChef - CNTDSETS 就是容斥,只是难了一二三四五\(\dots \inf\)点 题目大意: 给定你 ...

  10. 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

    [题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...

随机推荐

  1. Prometheus四种指标及PromQL实例

    Prometheus四种主要的指标类型包括Counter.Gauge.Histogram和Summary,以及相应的PromQL实例如下: Counter(计数器) 作用:只增不减的计数器,常用于记录 ...

  2. git 修改大小写远程分支失败

    先说原因: windows大小写不敏感导致   最近由于项目需求,改回了windows开发环境,之前一直是 mac 开发环境,结果在windows环境下使用 git 时, 把某个之前大写的文件夹名称改 ...

  3. pandas:如何保存数据比较好?

    我们在使用pandas处理完数据之后,最终总是要把数据作为一个文件保存下来,那么,保存数据最常用的文件是什么呢?我想大部分人一定会选择csv或者excel. 刚接触数据分析时,我也是这么选择的,不过, ...

  4. Spring Boot学习日记12

    学习了Thymeleaf模板引擎前端交给我们的页面,是html页面.如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据 ...

  5. 低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计

    上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面.本文我们将回到低开的核心-页面拖拉拽,探讨关 ...

  6. 记录--用 Vue 实现原神官网的角色切换效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 为了更好的了解原神角色,我模仿官网做了一个角色切换效果,在做的过程当中也总结了一些技术点. 为了让大家更好的体验,我兼容了 PC 端 ...

  7. 优化Mysql配置调整内存

    1.查看Mysql版本 # mysql -V 示例: [root@root /]# mysql -V mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64 ...

  8. 【Oracle】手动安装和卸载Oracle,这是最全的一篇了!!

    写在前面 之前写过一篇在CentOS 7/8上安装Oracle的文章,按照我写的文章安装成功了,但是卸载Oracle时出现了问题.今天,我就整理一篇手动安装和卸载Oracle的文章吧.全文为实战型内容 ...

  9. redis安装启动脚本

    #!/bin/bash # sudo yum install -y gcc # sudo yum install -y ruby build-essential BASE=/usr/local ps ...

  10. KingbaseES V8R3集群运维案例---failover切换故障分析

    案例说明: KingbaseES V8R3集群主库数据库服务重启后,failover切换失败,分析failover失败的具体原因. 适用版本: KingbaseES V8R3 一.集群架构 node1 ...