luogu P4180 【模板】严格次小生成树[BJWC2010]

任重而道远

题目描述

小C最近学了很多最小生成树的算法,Prim算法、Kurskal算法、消圈算法等等。正当小C洋洋得意之时,小P又来泼小C冷水了。小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说:如果最小生成树选择的边集是EM,严格次小生成树选择的边集是ES,那么需要满足:(value(e)表示边e的权值) ∑e∈EMvalue(e)<∑e∈ESvalue(e)\sum_{e \in E_M}value(e)<\sum_{e \in E_S}value(e)∑e∈EM​​value(e)<∑e∈ES​​value(e)

这下小 C 蒙了,他找到了你,希望你帮他解决这个问题。

输入输出格式

输入格式:

第一行包含两个整数N 和M,表示无向图的点数与边数。 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z。

输出格式:

包含一行,仅一个数,表示严格次小生成树的边权和。(数据保证必定存在严格次小生成树)

输入输出样例

输入样例#1: 复制

5 6
1 2 1 
1 3 2 
2 4 3 
3 5 4 
3 4 3 
4 5 6 

输出样例#1: 复制

11

说明

数据中无向图无自环; 50% 的数据N≤2 000 M≤3 000; 80% 的数据N≤50 000 M≤100 000; 100% 的数据N≤100 000 M≤300 000 ,边权值非负且不超过 10^9 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最小生成树(Minimum Spanning Tree, MST)是一种用于在加权无向连通图中找到最小生成树算法最小生成树是指在一个连通无向图中,选取一些边连接所有顶点,且这些边的边权之和最小。 下面给出两种最小生成树算法:Kruskal算法和Prim算法。 1. Kruskal算法 Kruskal算法是一种基于贪心策略的算法,其基本思想是先将图中所有边按照权值从小到大排序,然后依次选取每条边,并检查该边是否会形成环,如果不形成环,则将该边加入最小生成树中。 算法步骤: 1. 对图中所有边按照权值从小到大进行排序。 2. 依次选取每条边,如果该边不会形成环,则将该边加入最小生成树中。 3. 直到最小生成树中包含n-1条边为止。 下面给出一个使用Kruskal算法求解最小生成树的实例: ![kruskal_example](https://cdn.luogu.com.cn/upload/image_hosting/0x6m0q9j.png) 对于以上的图,我们按照边权从小到大进行排序,得到以下的边集合: {(1,2),(1,4),(2,3),(2,4),(3,4),(4,5),(5,6)} 依次选取每条边,并检查该边是否会形成环,最终得到的最小生成树为: ![kruskal_example_mst](https://cdn.luogu.com.cn/upload/image_hosting/3z4jyt0n.png) 2. Prim算法 Prim算法也是一种基于贪心策略的算法,其基本思想是从任意一个顶点开始,依次选择与当前已选顶点集合相邻且权值最小的边,并将其加入最小生成树中。 算法步骤: 1. 从任意一个顶点开始,将该顶点加入已选顶点集合。 2. 依次选择与当前已选顶点集合相邻且权值最小的边,并将其加入最小生成树中。 3. 直到最小生成树中包含n-1条边为止。 下面给出一个使用Prim算法求解最小生成树的实例: ![prim_example](https://cdn.luogu.com.cn/upload/image_hosting/n3x1it0v.png) 假设我们从顶点1开始,按照权值从小到大依次选择与当前已选顶点集合相邻且权值最小的边,并将其加入最小生成树中。得到的最小生成树为: ![prim_example_mst](https://cdn.luogu.com.cn/upload/image_hosting/3cx0d6x3.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值