6807 - Túnel de Rata


题目大意:

去除图中的所有回路,且去除的边权和最小。

解题思路:

因为要使去掉的边最小,剩下的图有不能又任何回路,可以想到生成树的模型,生成树上在加边,就会构成回路。所以尽可能使得生成树上的边权最大,那么去掉的边权和就最小。用Kruskal算法可以很方便地实现。

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;const int MAXN = 10010;
const int MAXM = 100010;
struct Path {int u, v, w;bool operator < (const Path &b) {return w > b.w;}
} path[MAXM];int father[MAXN], rank_set[MAXN], s, l, sum, nCase, cCase;
bool used[MAXM];int find_set(int x) {return father[x] == x ? x : father[x] = find_set(father[x]);
}void union_set(int x, int y) {int a = find_set(x), b = find_set(y);if (a == b) return;if (rank_set[a] < rank_set[b]) {father[a] = b;} else {father[b] = a;if (rank_set[a] == rank_set[b]) {rank_set[a]++;}}
}void input() {scanf("%d%d", &s, &l);sum = 0;for (int i = 0; i < l; i++) {scanf("%d%d%d", &path[i].u, &path[i].v, &path[i].w);sum += path[i].w;}
}void init() {for (int i = 1; i <= s; i++) {father[i] = i;rank_set[i] = 1;}memset(used, false, sizeof(used));
}void solve() {sort(path, path+l);int ans = 0;for (int i = 0; i < l; i++) {if (find_set(path[i].u) != find_set(path[i].v)) {union_set(path[i].u, path[i].v);ans += path[i].w;used[i] = true;}}int ans1 = sum - ans;for (int i = 0; i < l; i++) {if (!used[i]) {printf("Case #%d: %d %d\n", ++cCase, ans1, path[i].w);break;}}
}int main() {scanf("%d", &nCase);while (nCase--) {input();init();solve();}return 0;
}

UVaLive/LA 6807 Túnel de Rata(最大生成树)相关推荐

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

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

  2. UVAlive6807 Túnel de Rata (最小生成树)

    题意 题目链接 Sol 神仙题Orz 我们考虑选的边的补集,可以很惊奇的发现,这个补集中的边恰好是原图中的一颗生成树: 并且答案就是所有边权的和减去这个边集中的边的权值: 于是我们只需要求最大生成树就 ...

  3. qui ajax,Ajax Fils de T Lamon

    摘要: Ce contenu est une compilation d'articles de l'encyclopédie libre Wikipedia. Dans la mythologie ...

  4. oracle imp exclound,Ce este o bază de date cloud | Oracle România

    Bază de date în cloud Există două modele principale de implementare a bazelor de date în cloud. Trad ...

  5. oracle buys,Aconex - Logiciel de contrôle des projets de construction | Oracle France

    Aucun résultat trouvé Votre recherche n'a donné aucun résultat. Nous vous suggérons d'essayer ce qui ...

  6. Guía de Inversión Minera en Argentina阿根廷矿业投资指引

    I. Introducción. 引言 Argentina tiene un potencial único para el desarrollo de la minería moderna y su ...

  7. Verre est encore employ茅e pour les marques de haute qualit茅

    Maillot de football t茅l茅chargement de polices , de la conception de lunettes de soleil lunettes de s ...

  8. 资源推荐 | TensorFlow电子书《FIRST CONTACT WITH TENSORFLOW》

    资源推荐 | TensorFlow电子书<FIRST CONTACT WITH TENSORFLOW> 2016-06-29 系统科学社 本书由 UPC Barcelona Tech大学教 ...

  9. Matlab中pickic_法语「野餐」怎么写?不是picnic哦

    沪江法语君按:用正确的单词约小伙伴去野餐吧. 法语中野餐究竟怎么写,Pique nique,Pique-nique,还是Picnic或者Pic nic? 在口语中,这个问题肯定没什么难的.它们的发音都 ...

最新文章

  1. 微信电视来了 微信遥控传屏弹幕统统有
  2. clisp语言中的包
  3. python 字符串前面加 f
  4. 敏捷和DevOps词汇表
  5. setfacl 权限导出_linux学习-setfacl设置特定目录用户权限
  6. Swift之深入解析如何自定义操作符
  7. 快递鸟电子面单打印功能基于java
  8. Javascrip—前端本地存储讲解(16)
  9. SAP Commerce(原Hybris)的一些架构图,持续更新
  10. c++中.dll与.lib文件的生成与使用的详解
  11. 驻定相位原理(POSP)的简单应用
  12. C++11命名空间的using说明
  13. 基于CUDA的粒子系统的实现
  14. Oracle数据库学习(四)
  15. C#简介和异常类总结
  16. 解决Exchange用户邮箱别名为乱码的问题
  17. GsonFormat的使用
  18. 删除进程 linux,linux批量删除进程
  19. Word 内容被锁定的两种解决方法
  20. 有关计算机和音乐论文,计算机音乐

热门文章

  1. Unite Beijing 2015大型活动
  2. 基于java+swing的电影票订票管理系统(java+swing+MySQL)
  3. matlab实现LZW压缩
  4. 爱甲专线分享甲状腺随访大数据多中心平台建设经验,与会专家广泛关注
  5. 程序员的聊天养成手册
  6. 使用RXJS实现高级缓存
  7. 走出新手村,软件测试银行项目怎么测试 + 面试题(答案)我直接起飞了......
  8. Visual Studio 调试器中的转储文件
  9. LeetCode 2226. 每个小孩最多能分到多少糖果
  10. 人体动作识别、预测常用骨架数据集小结