首页 > 其他分享 >最小生成树

最小生成树

时间:2023-07-11 12:13:12浏览次数:27  
标签:pq val int ed 最小 生成 edge ptop

最小生成树

定义

  • 边权和最小的生成树

Kruskal 算法

  • 让边从小到大排序,如果不在同一集合,就加入
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5e3 + 10,MAXM = 2e5 + 10;
int n,m;
int a[MAXN];
int find(int x)
{
	if(a[x] == x) return x;
	else return a[x] = find(a[x]);
}
struct edge{
	int u,v,val;
}ed[MAXM];
bool cmp(edge a,edge b)
{
	return a.val < b.val;
}
int sum;
void pre()
{
	for(int i = 1;i <= n;i++)
	a[i] = i;
}
void Kruskal()
{
	pre();
	sum = 0;
	for(int i = 1;i <= m;i++)
	{
		if(find(ed[i].u) != find(ed[i].v))
		{
			sum += ed[i].val;
			a[find(ed[i].u)] = find(ed[i].v);
		}
	}
}
int main()
{
	cin >> n >> m;
	for(int i = 1;i <= m;i++)
	{
		cin >> ed[i].u >> ed[i].v >> ed[i].val;
	}
	sort(ed + 1,ed + 1 + m,cmp);
	Kruskal();
	bool flag = true;
	for(int i = 2;i <= n;i++)
	if(find(i) != find(i - 1))
	flag = false;
	if(flag)
	cout << sum;
	else
	cout << "orz";
}

Prim算法

  • 搜索,对查到的边排序,取最小的边,加入
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5e3 + 10,MAXM = 2e5 + 10;
int n,m;
struct edge{
	int v,val;
	edge* nex;
}ed[MAXM*2];
edge* head[MAXN];
int ptop = 0;
void add_edge(int u,int v,int val)
{
	ed[ptop].v = v,ed[ptop].val = val;
	ed[ptop].nex = head[u];
	head[u] = &ed[ptop];
	ptop++;
}
int sum = 0;
struct cmp{
	bool operator()(const pair<int,int>& a,const pair<int,int>& b)const{
		return a.second > b.second;
	}
};
priority_queue<pair<int,int>,vector<pair<int,int>>,cmp> pq;
bool use[MAXN];
int num = 0;
void Prim()
{
	pq.push({1,0});//距离点1距离为0
	while(!pq.empty() && num < n)
	{
		int x = pq.top().first,val = pq.top().second;
		pq.pop();
		if(use[x]) continue;
		use[x] = 1;//标记
		num++;
		sum += val;
		edge* p = head[x];
		while(p != NULL)
		{
			int y = p -> v,val = p -> val;
			pq.push({y,val});
			p = p -> nex;
		}
	}
}
int main()
{
	cin >> n >> m;
	for(int i = 1;i <= m;i++)
	{
		int x,y,val;cin >> x >> y >> val;
		add_edge(x,y,val);
		add_edge(y,x,val);
	}
	Prim();
	if(num != n)
	cout << "orz";
	else
	cout << sum;
}

标签:pq,val,int,ed,最小,生成,edge,ptop
From: https://www.cnblogs.com/xxcdsg/p/17544288.html

相关文章

  • MATLAB代码:基于概率距离快速削减法的风光场景生成与
    MATLAB代码:基于概率距离快速削减法的风光场景生成与削减方法关键词:风光场景生成场景削减概率距离削减法蒙特卡洛法仿真平台:MATLAB平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品!主要内容:代码主要做的是风电、光伏以及电价场景不确定性模拟,首先由一组确定性......
  • MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解
    MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解关键词:两阶段鲁棒列约束生成法CCG算法鲁棒优化参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX优势:代码注释详实,适合参考学习,非......
  • logstash+Elasticseach单节点 让logstash生成单副本索引
    要让Logstash和Elasticsearch生成单副本索引,请按照以下步骤更改Logstash的输出配置文件:打开Logstash配置文件,该文件默认位于 logstash/config 目录下。找到输出部分配置,并添加以下行:output{elasticsearch{hosts=>["localhost"]index=>"your......
  • 配电网多目标动态无功优化 基于IEEE33节点配电网,以配电网网损最小 电压偏差最小以及
    配电网多目标动态无功优化基于IEEE33节点配电网,以配电网网损最小电压偏差最小以及光伏消纳最大为目标,考虑了24个不同时刻的时间尺度,以光伏接入容量,变压器变比和两个无功补偿接入的容量为优化变量,通过多目标粒子群算法进行求解,得到最佳接入策略根据你提供的代码,我将对程序进行详......
  • 根据姓名生成邮箱号
    importrandomimportpypinyindefgen_mail(word):#根据姓名生成邮箱号s=''foriinpypinyin.pinyin(word,style=pypinyin.NORMAL):s+=''.join(i)r=''for_inrange(4):r+=str(random.randi......
  • 图的应用--最小生成树
    图的应用--最小生成树生成树概念:所有顶点均由边连接在一起.但不存在回路.一个图可以有许多不同的生成树.生成树特点:生成树的顶点个数与图的顶点个数相同.生成树是图的极小联通子图,去掉一条边则非联通一个有n个顶点的连通图的生成树有n-1条边在生成树中再加一条边必然......
  • 根据模板动态生成word(二)使用poi生成word
    @目录一、准备模板1、创建模板文件二、代码实践1、引入依赖2、自定义XWPFDocument2、公用的方法和变量3、工具类引用的包名4、段落文本替换5、图片替换6、表格替换7、完整的工具类代码三、验证模板生成1、测试代码2、生成效果四、总结一、准备模板1、创建模板文件创建一个word......
  • 村子(最小化)
    解题:贪心很明显越靠近越好。随便从一个点出发,按照翻的排列方式来选择和父亲链接还是和兄弟链接。记得每次加2哦~~~~具体代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+500;intn,par[N],swp[N],p[N];vector<int>g[N],re......
  • 考虑多风场出力相关性的可再生能源场景生成/风电场景生成,并通过聚类算法场景削减成几
    考虑多风场出力相关性的可再生能源场景生成/风电场景生成,并通过聚类算法场景削减成几个场景,每个场景都有确定的出现概率。完美复现《考虑多风电场出力Copula相关关系的场景生成方法》Copula函数(连接函数)描述空间相邻风电场间的相关性,提出一种基于Copula函数生成风电场出力......
  • MATLAB代码:基于列约束生成法CCG的两阶段问题求解 关键词:两阶
    MATLAB代码:基于列约束生成法CCG的两阶段问题求解关键词:两阶段鲁棒列约束生成法CCG算法参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX主要内容:代码构建了两阶段鲁棒优化模型,并用文......