NC53074 Forsaken喜欢独一无二的树
题目
题目描述
众所周知,最小生成树是指使图中所有节点连通且边权和最小时的边权子集。
不过最小生成树太简单了,我们现在来思考一个稍微复杂一点的问题。
现在给定一个 \(n\) 个点, \(m\) 条边的图,每条边 \(e_i\) 都有一个权值 \(w_i\) 。定义删除一条边 \(e_i\) 的代价为 \(w_i\) ,并且你可以对这个图执行任意次删边操作。
设这个图的最小生成树权值和为 \(sum\) ,定义一个图的最小生成树是独一无二的当且仅当这个图的边集中没有除最小生成树外的其他子集能满足权值和为 \(sum\) 且使得所有点连通。一个图刚开始可能没有独一无二的最小生成树,现在你可以删除一些边,使得剩下的边的最小生成树大小依然为 \(sum\) 并且这个图的最小生成树是独一无二的。
现在我们想要知道删除的边的权值和最小是多少?
输入描述
第一行输入为 \(n\) 和 \(m\) ,表示这个图的点数和边数。
接下来 \(m\) 行,每行三个值 \(u_i\) , \(v_i\) , \(w_i\) ,分别代表每条边的两个端点和边权。
输出描述
一个整数,代表删除的边的最小权值和。
示例1
输入
1 0
输出
0
备注
\(1 \leq n\leq 2e5\)
\(n - 1 \leq m\leq 2e5\)
\(1 \leq u_i, v_i \leq n\)
\(1 \leq w_i \leq1e9\)
题解
知识点:枚举,双指针,最小生成树。
最小生成树出现不同解,是因为同一权值的边连接两个已经连通的点。因此我们可以每次把相同权值的边放一起考虑,如果某条边所连两点已经连通,这个条边就是可以删掉的。
时间复杂度 \(O(m\log m)\)
空间复杂度 \(O(m)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5 + 7, M = 2e5 + 7;
struct edge {
int u, v, w;
}e[M];
int fa[N];
int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y) {
fa[find(x)] = find(y);
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1;i <= n;i++) fa[i] = i;
for (int i = 1;i <= m;i++) {
int u, v, w;
cin >> u >> v >> w;
e[i] = { u,v,w };
}
sort(e + 1, e + m + 1, [&](edge a, edge b) {return a.w < b.w;});
int l = 1, r = 1;
ll ans = 0;
while (l <= m) {
while (r <= m) {
if (e[r].w != e[l].w) break;
r++;
}
for (int i = l;i < r;i++)
if (find(e[i].u) != find(e[i].v)) ans += e[i].w;
for (int i = l;i < r;i++)
if (find(e[i].u) != find(e[i].v)) ans -= e[i].w, merge(e[i].u, e[i].v);
l = r;
}
cout << ans << '\n';
return 0;
}
NC53074 Forsaken喜欢独一无二的树的更多相关文章
- 牛客小白月赛18 Forsaken喜欢数论
牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...
- Forsaken喜欢数论
链接:https://ac.nowcoder.com/acm/contest/1221/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048 ...
- BZOJ4372烁烁的游戏——动态点分治+线段树(点分树套线段树)
题目描述 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮鼠.皮皮鼠会被 ...
- [NOI2005]月下柠檬树(计算几何+积分)
题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 索着人生的哲理. 李哲是一个喜爱思考的孩子,当他看 ...
- 【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
[BZOJ1502][NOI2005]月下柠檬树 Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树 ...
- 【BZOJ4372】烁烁的游戏 动态树分治+线段树
[BZOJ4372]烁烁的游戏 Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距 ...
- 【bzoj1502】[NOI2005]月下柠檬树 自适应Simpson积分
题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在月 ...
- BZOJ1502:[NOI2005]月下柠檬树——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1502 https://www.luogu.org/problemnew/show/P4207 李哲 ...
- [BZOJ1502]月下柠檬树(自适应辛普森积分)
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1387 Solved: 739[Submit][Status] ...
- 【线段树 扫描线 二维数点】loj#6276. 果树
路径计数转成二维数点很妙啊 题目描述 NiroBC 姐姐是个活泼的少女,她十分喜欢爬树,而她家门口正好有一棵果树,正好满足了她爬树的需求. 这颗果树有 $N$ 个节点,标号 $1 \ldots N$ ...
随机推荐
- Mysql有布尔(BOOL)类型吗
转载请注明出处: 在MySQL中,没有专门的Boolean数据类型.相反,MySQL中使用TINYINT(1)来代表布尔类型,其中1表示真(True),0表示假(False).在MySQL中,TINY ...
- Windows 下 Outlook 点击关闭最小化和开机自动运行
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- uniapp 子页面 滚动监听 是否到底
主要属性: handleScrollToLower <template> <view class="menu"> <scroll-view id=& ...
- [转帖]JDK8使用G1 垃圾回收器能解决大问题吗?
https://zhuanlan.zhihu.com/p/458098236 G1 垃圾回收器真的不行吗? 本文想突出两个问题: 解决问题的思路:从最原始的角度去思考,问题的本身是因为缓存数据导致的G ...
- Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法
Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法 背景说明 昨天的处置已经可以让外部可以使用唯一的电信IP地址访问内部交换机的服务器了. 但是今天的场景是想让内网交换机的 ...
- [转帖]使用SkyWalking监控nginx (以openresty为例)
https://www.cnblogs.com/hahaha111122222/p/15829737.html 安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs. ...
- [转帖]SpecCPU2017 测试cpu性能
https://www.bbsmax.com/A/GBJrxP1Ed0/ SpecCPU介绍见: https://blog.csdn.net/qq_36287943/article/details/1 ...
- 准备学习 make
make -h用法:make [选项] [目标] ...选项: -b, -m 为兼容性而忽略. -B, --always-make 无条件制作 (make) 所有目标. -C 目录, --direct ...
- 说透IO多路复用模型
作者:京东零售 石朝阳 在说IO多路复用模型之前,我们先来大致了解下Linux文件系统.在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件 ...
- 手写Promise自定义封装 then 函数
Promise 自定义封装 then 函数 <script src="./Promise.js"></script> <script type=&qu ...