2024.8.17


130124202408171002


DATE #:20240817

ITEM #:DOC

WEEK #:SATURDAY

DAIL #:捌月拾肆

TAGS

复制代码
	
< BGM = "快哉风 -- 黄金玉米王" >
< theme = oi-language >
< theme = oi-graph theory >
< [空] > 
< [空] >
复制代码
取次花丛懒回顾,半缘修道半缘君 -- 元稹《离思五首·其四》

P4208 \[JSOI2008 最小生成树计数](P4208 [JSOI2008 最小生成树计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](https://www.luogu.com.cn/problem/P4208))

JSOI2008 最小生成树计数

题目描述

现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树。(如果两棵最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生成树可能很多,所以你只需要输出方案数对 31011 31011 31011 的模就可以了。

输入格式

第一行包含两个数, n n n 和 m m m,其中 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100, 1 ≤ m ≤ 1000 1 \le m \le 1000 1≤m≤1000,表示该无向图的节点数和边数。每个节点用 1 ∼ n 1 \sim n 1∼n 的整数编号。

接下来的 m m m 行,每行包含两个整数: a , b , c a,b,c a,b,c,表示节点 a , b a,b a,b 之间的边的权值为 c c c,其中 1 ≤ c ≤ 1 0 9 1 \le c \le 10^9 1≤c≤109。

数据保证不会出现自回边和重边。注意:具有相同权值的边不会超过 10 10 10 条。

输出格式

输出不同的最小生成树有多少个。你只需要输出数量对 31011 31011 31011 的模就可以了。

样例 #1

样例输入 #1

复制代码
4 6
1 2 1
1 3 1
1 4 1
2 3 2
2 4 1
3 4 1

样例输出 #1

复制代码
8

提示

数据范围及约定

对于全部数据, 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100, 1 ≤ m ≤ 1000 1 \le m \le 1000 1≤m≤1000, 1 ≤ c i ≤ 1 0 9 1\leq c_i\leq 10^9 1≤ci≤109。

先引入一个引理:

对于一个图的最小生成树,每个边权的边出现的次数是一样的

证明:模拟kruskal的过程,我们在给边排序时,交换同权的边并没有什么影响

那么我们先求解出最小生成树,并依次计算权值

考虑,当我们要加入权值为 i i i的若干条边时,

前面加入的边已经使其变成了几个联通块,只要考虑用权值为 i i i的边跑一次生成树数量即可,

之后对每个边权都依次操作
CODE

复制代码
    //2024.8.17
    //by white_ice
    //[JSOI2008] 最小生成树计数 |P4208
    #include
相关推荐
罗西的思考1 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX2 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面3 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号3 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽3 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI3 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者5 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者5 小时前
【征程6】校准量化中HistogramObserver解析
算法
OuO-26 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人6 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法