UVAlive6807 Túnel de Rata (最小生成树)
题意
题目链接
Sol
神仙题Orz
我们考虑选的边的补集,可以很惊奇的发现,这个补集中的边恰好是原图中的一颗生成树;
并且答案就是所有边权的和减去这个边集中的边的权值;
于是我们只需要求最大生成树就好了;
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e6 + 10, INF = 1e9 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, T, val, ans, f[MAXN];
struct Edge {int u, v, w;bool operator < (const Edge &rhs) const {return w > rhs.w;}
}E[MAXN];
int fa[MAXN];
int find(int x) {return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
}
void Kruskal() {memset(f, 0, sizeof(f));val = -1; ans = 0;sort(E + 1, E + M + 1);for(int i = 1; i <= N; i++) fa[i] = i;for(int i = 1; i <= M; i++) {int x = E[i].u, y = E[i].v, w = E[i].w, fx = find(x), fy = find(y);if(fx == fy) continue;fa[fx] = fy; f[i] = 1;ans += w;}for(int i = 1; i <= M; i++) if(!f[i]) {val = E[i].w; break;}
}
int main() {
// freopen("a.in", "r", stdin);T = read();for(int i = 1; i <= T; i++) {N = read(); M = read(); int sum = 0;for(int j = 1; j <= M; j++) E[j].u = read(), E[j].v = read(), E[j].w = read(), sum += E[j].w;Kruskal();printf("Case #%d: %d %d\n", i, sum - ans, val);}return 0;
}
UVAlive6807 Túnel de Rata (最小生成树)相关推荐
- UVaLive/LA 6807 Túnel de Rata(最大生成树)
6807 - Túnel de Rata 题目大意: 去除图中的所有回路,且去除的边权和最小. 解题思路: 因为要使去掉的边最小,剩下的图有不能又任何回路,可以想到生成树的模型,生成树上在加边,就会构 ...
- UVALive 6807 Túnel de Rata (最大生成树)
大体题意: 一个老鼠从A点出发,经过一个环回到起点,他可能走到任意地点, 让你在一些边上放摄像头,使得无论老鼠怎么走,总有一个摄像头能看到老鼠! 摄像头的成本是这条边的权值! 思路: 既然他可以走到任 ...
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...
图的深度优先遍历 题目:写出附从每个顶点出发的一次深度优先搜索遍历序列.在纸上画出遍历过程和序列,提交截图. 错误回答 从A点开始遍历:0124-01324-0134-0324-034 从B点开始遍历 ...
- 浅谈最小生成树的算法思路(一)Prim算法
Prim算法是求最小生成树的一种常见算法,简单谈一下笔者自己的理解. 算法思路 设已经确定的点集为P,初始为空.设还未确定的点集为Q,初始为该图所有点的集合.设已经确定的边为X,初始为空. 选取任意一 ...
- 最小生成树的Prime算法的思想
Prime算法的核心步骤是:在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈ ...
- ds图—最小生成树_Python实现最小生成树
Python实现最小生成树--Prim算法和Kruskal算法 文章目录 Python实现最小生成树--Prim算法和Kruskal算法 前言 设计 需求分析 系统设计 系统实现 Prim算法 Kru ...
- 【恋上数据结构】图代码实现、最小生成树(Prim、Kruskal)、最短路径(Dijkstra、Bellman-Ford、Floyd)
图 最小生成树(Minimum Spanning Tree) Prim算法 切分定理 Prim算法 – 执行过程 Prim算法 – 代码实现 Kruskal算法 Kruskal算法 – 执行过程 Kr ...
- 最小生成树原理及Kruskal算法的js实现
1. 生成树和最小生成树的概念 设图G(V,E)连通,则 生成树:包含图G(V,E)中的所有节点,及|V|-1条边的连通图,一个图的生成树可以有多颗 最小生成树:最小权重生成树,在生成树的概念上加一个 ...
最新文章
- Syncthing源码解析 - 第三方库
- 新技能 Get,使用直方图处理进行颜色校正
- 嵌入式学习笔记-LM75温度传感器驱动总结
- Python 析构方法__del__
- HashMap 1.7 死循环过程
- 使用了SAP Spartacus的一个在线网站:乐高Storefront
- ubuntu16.04安装CecureCRT 并破解
- .NET 5 部署在docker上运行
- [Android] Android统计Apk , jar包方法数
- Modbus协议模型
- [watchtower] 自动更新 Docker 镜像与容器
- Mybatis(动态SQL大全)
- 面试题之wait()和sleep()方法区别
- centos更新yum时遇到的问题
- 爱立信宣布收购FYI电视
- 50岁的程序员该何去何从
- 七参数坐标转换的几种解法
- iOS开发脚踏实地学习day15-画板
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛
- XDOJ 133-一元稀疏多项式计算器
热门文章
- 2022年春节记录8
- Nexus 6p Android 7.0 Root
- php抓取百度搜索百度快照,php抓取百度快照、百度收录、百度热词程序代码,抓取百度快照_PHP教程...
- HTTPS免费证书StartSSL申请全过程
- pycharm常用快捷键与structure视图
- 服务器芯片维修,基于英特尔六核64位“服务器级”处理芯片
- WordPress主题制作全过程(九):制作single.php
- pycharm无法安装加载插件、三方库解决办法
- SQL 字符串首字母大写其余小写
- python docx 图片_python-docx图像的添加与删除