2018.09.15 秘密的牛奶管道SECRET(次小生成树)

这篇博客介绍了约翰叔叔为避免竞争对手得知其供水线路选择,而寻求第二便宜的连接所有供水站的方法。这是一个图论问题,涉及次小生成树的概念。博客提供了问题描述、输入输出格式、样例输入输出,并分享了作者自己的解题思路和代码实现。
摘要由CSDN通过智能技术生成
描述

约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线。一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式。
现在有W(3 <= W <= 2000)个供水站,其中最多有P(P <=20,000)< span=”“>条管道,每一条管道连接了两个水站,并且不存在一条管道连接同一个水站,两个水站之间最多只有一条管道。每条管道有一定的费用。请寻找第二便宜的连接方式,使所有的水站相连。
假设最便宜的方案有且只有一种,并且至少有两种可行的连接方案。所有的费用都不超过16位有符号整数。水站用1到W的自然数表示

输入

第一行:两个数W和P 第2~P+1行:每行描述了一条管道,有3个用空格分开的整数,前两个数表示管道连接的两个端点。第3个数是管道的费用

输出

仅一行,第二便宜的管道铺设费用

样例输入

5 7
1 2 3
2 3 4
1 4 7
2 4 11
2 5 9
5 4 5
3 5 8

样例输出

20

标签

USACO2002-OPEN-GREEN


自己yy了一个次小生成树的写法。
就是每次用一个 不在次小生成树中的边去更新答案。
代码:

#include<bits/stdc++.h>
#define N 100005
#define M 300005
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define ll long long
#define xx first
#define yy second
using namespace std;
inline ll read(){
    ll ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值