题意

题目链接

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 (最小生成树)相关推荐

  1. UVaLive/LA 6807 Túnel de Rata(最大生成树)

    6807 - Túnel de Rata 题目大意: 去除图中的所有回路,且去除的边权和最小. 解题思路: 因为要使去掉的边最小,剩下的图有不能又任何回路,可以想到生成树的模型,生成树上在加边,就会构 ...

  2. UVALive 6807 Túnel de Rata (最大生成树)

    大体题意: 一个老鼠从A点出发,经过一个环回到起点,他可能走到任意地点, 让你在一些边上放摄像头,使得无论老鼠怎么走,总有一个摄像头能看到老鼠! 摄像头的成本是这条边的权值! 思路: 既然他可以走到任 ...

  3. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  4. 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...

    图的深度优先遍历 题目:写出附从每个顶点出发的一次深度优先搜索遍历序列.在纸上画出遍历过程和序列,提交截图. 错误回答 从A点开始遍历:0124-01324-0134-0324-034 从B点开始遍历 ...

  5. 浅谈最小生成树的算法思路(一)Prim算法

    Prim算法是求最小生成树的一种常见算法,简单谈一下笔者自己的理解. 算法思路 设已经确定的点集为P,初始为空.设还未确定的点集为Q,初始为该图所有点的集合.设已经确定的边为X,初始为空. 选取任意一 ...

  6. 最小生成树的Prime算法的思想

    Prime算法的核心步骤是:在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈ ...

  7. ds图—最小生成树_Python实现最小生成树

    Python实现最小生成树--Prim算法和Kruskal算法 文章目录 Python实现最小生成树--Prim算法和Kruskal算法 前言 设计 需求分析 系统设计 系统实现 Prim算法 Kru ...

  8. 【恋上数据结构】图代码实现、最小生成树(Prim、Kruskal)、最短路径(Dijkstra、Bellman-Ford、Floyd)

    图 最小生成树(Minimum Spanning Tree) Prim算法 切分定理 Prim算法 – 执行过程 Prim算法 – 代码实现 Kruskal算法 Kruskal算法 – 执行过程 Kr ...

  9. 最小生成树原理及Kruskal算法的js实现

    1. 生成树和最小生成树的概念 设图G(V,E)连通,则 生成树:包含图G(V,E)中的所有节点,及|V|-1条边的连通图,一个图的生成树可以有多颗 最小生成树:最小权重生成树,在生成树的概念上加一个 ...

最新文章

  1. Syncthing源码解析 - 第三方库
  2. 新技能 Get,使用直方图处理进行颜色校正
  3. 嵌入式学习笔记-LM75温度传感器驱动总结
  4. Python 析构方法__del__
  5. HashMap 1.7 死循环过程
  6. 使用了SAP Spartacus的一个在线网站:乐高Storefront
  7. ubuntu16.04安装CecureCRT 并破解
  8. .NET 5 部署在docker上运行
  9. [Android] Android统计Apk , jar包方法数
  10. Modbus协议模型
  11. [watchtower] 自动更新 Docker 镜像与容器
  12. Mybatis(动态SQL大全)
  13. 面试题之wait()和sleep()方法区别
  14. centos更新yum时遇到的问题
  15. 爱立信宣布收购FYI电视
  16. 50岁的程序员该何去何从
  17. 七参数坐标转换的几种解法
  18. iOS开发脚踏实地学习day15-画板
  19. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛
  20. XDOJ 133-一元稀疏多项式计算器

热门文章

  1. 2022年春节记录8
  2. Nexus 6p Android 7.0 Root
  3. php抓取百度搜索百度快照,php抓取百度快照、百度收录、百度热词程序代码,抓取百度快照_PHP教程...
  4. HTTPS免费证书StartSSL申请全过程
  5. pycharm常用快捷键与structure视图
  6. 服务器芯片维修,基于英特尔六核64位“服务器级”处理芯片
  7. WordPress主题制作全过程(九):制作single.php
  8. pycharm无法安装加载插件、三方库解决办法
  9. SQL 字符串首字母大写其余小写
  10. python docx 图片_python-docx图像的添加与删除