学习博客:https://www.cnblogs.com/zhangming-blog/p/5414514.html

其实就是加点法:从不属于这个集合的点中找从本集合可以找到的最小边,加入本集合

看代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
const ll mod=1e9+;
const int maxn=1e3+;
const int maxk=+;
const int maxx=1e4+;
const ll maxe=+;
#define INF 0x3f3f3f3f3f3f
ll v,e;
bool vis[maxn];//顶点i是否在集合X中
ll cost[maxn][maxn];//存两边的权值
ll mincost[maxn];//从集合X出发的边到每个顶点的最小权值
void solve()
{
ll ans=;
mincost[]=;
while(true)
{
int flag=-;
for(int i=;i<v;i++)
{
if(!vis[i]&&(flag==-||mincost[i]<mincost[flag]))
flag=i;
}
if(flag==-)
break;
vis[flag]=true;
ans+=mincost[flag];
for(int i=;i<v;i++)
{
mincost[i]=min(mincost[i],cost[flag][i]);
}
}
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin>>v>>e;
for(int i=;i<v;i++)
{
for(int j=;j<v;j++)
{
cost[i][j]=INF;
}
mincost[i]=INF;
cost[i][i]=;
vis[i]=false;
}
for(int i=;i<e;i++)
{
int a,b,va;
cin>>a>>b>>va;
cost[a][b]=va;
cost[b][a]=va;
}
solve();
return ;
}

最新文章

  1. 通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
  2. Java数据结构——哈希表
  3. 【海岛帝国系列赛】No.6 海岛帝国:战争前线
  4. 宜家的幸福生活,源于K2 BPM的支撑
  5. Mac下的SVN客户端工具Cornerstone使用教程
  6. http协议状态码对照表
  7. tcpdump使用和TCP/IP包分析
  8. HDU 4520 小Q系列故事――最佳裁判(STL)
  9. Qt之QHeaderView加入复选框
  10. java.lang.Object学习总结
  11. 一些关于IO流的问题
  12. Linux下tar压缩解压缩命令详解
  13. itexpdf同一个段落不同文字,如何设置不同的格式
  14. 关于next.js中的css
  15. BZOJ.4530.[BJOI2014]大融合(LCT)
  16. 利用FFMPEG命令进行文件分割
  17. Nginx+Tomcat+Memcached 实现集群部署时Session共享
  18. 微信分享自定义标题和图片的js
  19. memcached集群安装与测试
  20. 7.1 - CRM系统

热门文章

  1. android开发之数据库存取图片
  2. category extension
  3. EventLoop 与 Channel 的关联
  4. makefile 基础知识
  5. Dialog 自定义使用3(回调点击事件)
  6. 面试题: mysql 数据库已看 sql安全性 索引 引擎 sql优化
  7. 我的笔记文档版本控制系统-MediaWiki-目录悬浮+隐藏
  8. 浅谈REST API
  9. enter键触发事件的清除
  10. Java中的变量传递机制以及JS中的参数传递机制