题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6349

Knowledge Point: 最小生成树算法Prim&Kruskal

Summarize:

  本题采用构造两颗带权最小生成树的方法求解;

  求解最小生成树的方法有prim和kruskal两种方法,但是网上题解皆采用的后者;

  我用prim写了之后发现AC不了,主要是prim采用的邻接矩阵的方法存储边对这道题不适用,题目没有说过没有重复的边,而邻接矩阵会覆盖掉上一条颜色相同的边;

  此外需注意:

    1. 点数为1时特判;

    2. 当边数小于点数减一的时候可以直接判断无解;

    3. 当两棵树最小权值相同或都有解时,需分别记录两个最小值,并分别与当时剩下的边相加,每次都需比较之后再输出两者之间的最小值。

附kruskal代码,先按边从小到大排序后再依次求解:

 #include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; #define INF 1e9
const int N = 1e5+;
const int M = 5e5+;
int n,m;
struct Edge {
int from, to, value;
bool operator<(const Edge &a) {
return value<a.value;
}
}edge[M];
int vis[N], f[N]; int find(int x)
{
if(x != f[x])
f[x] = find(f[x]);
return f[x];
} void init()
{
for(int i=; i<n; i++)
vis[i]=, f[i] = i;
sort(edge, edge+m);
} void kruskal()
{
int cost=;
for(int i=; i<m; i++) {
int x = find(edge[i].from);
int y = find(edge[i].to);
if(x != y) {
f[x] = y;
cost += edge[i].value;
vis[edge[i].from] = vis[edge[i].to] = ;
}
}
cout<<cost<<endl;
} int main()
{
cin>>n>>m;
for(int i=; i<m; i++)
cin>>edge[i].from>>edge[i].to>>edge[i].value; init();
kruskal(); return ;
}

最新文章

  1. 再谈缓存和Redis
  2. eclipse按照svn插件
  3. WebForm 内置对象
  4. 1003. Emergency (25)
  5. 入门:PHP:hello world!
  6. Threading in C#
  7. hadoop(三):hdfs 机架感知
  8. 调试postgresql9.5.2最新源码
  9. C 函数原型
  10. 字符串(后缀自动机):COGS 2399. 循环同构
  11. HDU 1686 Oulipo(KMP+计算匹配成功次数)
  12. C#Winform使用mysql作为本地数据库
  13. [Helvetic Coding Contest 2017 online mirror]
  14. [五]java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
  15. 第三节:总结.Net下后端的几种请求方式(WebClient、WebRequest、HttpClient)
  16. python字符串截取、查找、分割
  17. hive join on 条件 与 where 条件区别
  18. 给网站配置免费的HTTS证书
  19. C# 调用微信接口上传素材和发送图文消息
  20. canvas 写一个刮刮乐抽奖

热门文章

  1. Tiny4412汇编流水灯代码,Tiny4412裸机LED操作【转】
  2. [CF348B]Apple Tree
  3. POJ1259 The Picnic 最大空凸包问题 DP
  4. TI BLE STACK - OSAL
  5. 06_锅炉压力案例_progressbar实现
  6. Linux 用户管理(2)
  7. mybatis时间查询小技巧
  8. C#+ItextSharp 查看pdf文件页面尺寸
  9. [Usaco2018 Open]Milking Order
  10. SpringMVC实现Action的两种方式以及与Struts2的区别