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$ ...
随机推荐
- 05-Shell索引数组变量
1.介绍 Shell 支持数组(Array),数组是若干数据的集合,其中的每一份数据都称为数组的元素. 注意Bash Shell 只支持一维数组,不支持多维数组. 2.数组的定义 2.1 语法 在 S ...
- MongoDB 部署副本集 + 代码中开启事务
首先,指定副本名称: vim /etc/mongod.conf replication: replSetName: shard1 在replication里面加入副本名称,多个相同副本,应该使用同样的 ...
- c#下使用WM_COPYDATA
[DllImport("User32.dll")] public static extern int SendMessage(IntPtr hwnd, int msg, int w ...
- [转帖]如何查看Docker容器环境变量,如何向容器传递环境变量
https://www.cnblogs.com/larrydpk/p/13437535.html 1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 了解Docker容器的运行 ...
- Oracle session的sid与serial的简单学习
Oracle session的sid与serial的简单学习 ITPUB vage的说法 这样说吧,Oracle允许的会话数(或者说连接数)是固定的,比如是3000个.假设每个会话要占1K字节,哪一共 ...
- [转帖]详解nginx的rewrite应用,Nginx高级之Rewrite规则
https://zhuanlan.zhihu.com/p/359801091 Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语 ...
- [转帖]S3FS 简介及部署
PS:文章一般都会先首发于我的个人Blog上:S3FS 简介及部署 · TonghuaRoot's BloG. ,有需要的小伙伴可以直接订阅我的Blog,获取最新内容. 0x00 前言 S3FS可以把 ...
- [转帖]lsblk命令详解
https://www.cnblogs.com/ishmaelwanglin/p/11043918.html lsblk命令用来查看block设备的信息. 主要应用场景: 获取wwnid,获取块设备列 ...
- [转帖]iptables的四表五链与NAT工作原理
本文主要介绍了iptables的基本工作原理和四表五链等基本概念以及NAT的工作原理. 1.iptables简介 我们先来看一下netfilter官网对iptables的描述: iptables is ...
- Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法
Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法 背景说明 昨天的处置已经可以让外部可以使用唯一的电信IP地址访问内部交换机的服务器了. 但是今天的场景是想让内网交换机的 ...