博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图论板子 最小生成树
阅读量:4493 次
发布时间:2019-06-08

本文共 1564 字,大约阅读时间需要 5 分钟。

kruskal算法 前向星+并查集 需排序(加边,还有一种加点的prim算法,不惯用,就不更了

排序后每次找权值最小的两节点组成的边,加入树,通过并查集确定公共祖先,若某边加入会出现环,跳过,直至所有点都加入树,该树即为最小生成树

板子

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;typedef pair
pr;typedef long long ll;#define fi first#define se second#define me(x) memset(x, -1, sizeof(x))#define mem(x) memset(x, 0, sizeof(x))#define MAXN 500000+5#define NIL -1struct node{ int u, v, w;}edge[MAXN];bool cmp(node a, node b){ if(a.w==b.w && a.u==b.u) return a.v
3 --> 4 --> 5 return r;}int mix() //合并 联通{ for(int i=0; i
>n>>m) { ans=0; for(i=1; i<=n; i++) p[i]=i; //初始化每个点的父节点为本身 for(i=0; i
>edge[i].u>>edge[i].v>>edge[i].w; sort(edge, edge+m, cmp); mix(); cout<
<

模板题

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;#define me(x) memset(x, -1, sizeof(x))#define mem(x) memset(x, 0, sizeof(x))const int MOD = 1e18;const int N = 2e6 + 5;int a[1005][1005], vis[1005][1005];struct node{ int u, v, d;}e[N];int p[N];int n, m, id, ans;void ini(){ id=0; mem(vis);}void add(int u, int v, int d){ e[id].u = u; e[id].v = v; e[id].d = d; id++;}bool cmp(node a, node b){ if(a.d==b.d && a.u==b.u) return a.v
View Code

 

转载于:https://www.cnblogs.com/op-z/p/11281738.html

你可能感兴趣的文章
递归问题
查看>>
Hyperledger下子项目
查看>>
Linq-查询上一条下一条
查看>>
常见前端开发的题目,可能对你有用
查看>>
BeautifulSoap库入门
查看>>
乐观锁与悲观锁
查看>>
Codeforces Round #328 (Div. 2)D. Super M 虚树直径
查看>>
Java判断是否为移动端
查看>>
chromedriver下载链接以及对应版本
查看>>
[SimplePlayer] 6. 音频同步
查看>>
把一个SVN项目的目录结构 导入到另外一个空白的SVN项目里
查看>>
Android之Adapter用法总结-(转)
查看>>
总结列表显示ListView知识点
查看>>
android 教程实例系列
查看>>
lucene笔记
查看>>
tomcat无法正常shutdown
查看>>
zookeeper + dubbo 搭建
查看>>
根据前序遍历和中序遍历求出二叉树并打印
查看>>
UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】
查看>>
Delphi的命令行编译命令
查看>>