最小生成树模板【kruskal & prim】
CDOJ 1966 Kruskal 解法
时间复杂度O(mlogm) m为边数,这里主要是边排序占时间,后面并查集还好
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL; const int N=;
const int M=2e5+;
int n,m,tot=,num=;
LL ans=;
int f[N];
struct Node
{
int u,v;
LL w;
bool operator < (const Node & b)
{
return w < b.w;
} }G[M]; int find(int x)
{
return x==f[x]?x:f[x]=find(f[x]);
} int unite(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)f[x]=y;
} void kruskal()
{
for(int i=;i<=n;i++)f[i]=i;
sort(G,G+tot);
for(int i=;i<tot;i++)
{
int u=find(G[i].u);
int v=find(G[i].v);
if(u!=v)
{
unite(u,v);
ans+=G[i].w;
num++;
}
}
if(num==n-)
{
cout<<"yes"<<endl;
cout<<ans<<endl;
}
else
cout<<"no"<<endl;
} int main()
{ cin>>n>>m; while(m--)
{
int a,b,v,p;
cin>>a>>b>>v>>p;
if(p==)continue;
G[tot].u=a;
G[tot].v=b;
G[tot].w=v;
tot++;
}
kruskal();
return ;
}
prim模板:主要用于稠密图,尤其是完全图的最小生成树
时间复杂度为O(n^2),如果用最小堆优化,为O(mlogn) [实际为O((m+n)logn),假设m边数>=n顶点数,从而简写] 算法分为两部分,一个找当前最小值,一个根据当前点的临边更新数组。logn获取最小值并从堆中删除,后用logn执行一条边的更新
int cost[N][N]; // 表示e=(u,v)的权值,不存在情况为INF
int mincost[N]; // 从集合x出发的边到每个顶点的最小权值
bool vis[N]; // 集合x内的顶点
int V; // 顶点数 int prim()
{
for(int i=;i<V;i++)
{
mincost[i]=INF;
vis[i]=;
}
mincost[]=; // 默认选第一个顶点为起始点
int res=; while(true)
{
int v=-;
for(int u=;u<V;u++)
if(!vis[u]&&(v==-||mincost[u]<mincost[v]))v=u; if(v==-)break;
vis[v]=;
res+=mincost[v];
for(int u=;u<V;u++)
{
if(mincost[u]>cost[v][u])
mincost[u]=cost[v][u];
}
}
return res;
}
最小生成树模板【kruskal & prim】的更多相关文章
- 最小生成树(Kruskal+Prim)--模板
最小生成树-----在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. 应用场景 1.假设以下情景,有一块木板,板上钉上了一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通 ...
- poj 1258 最小生成树 模板
POJ 最小生成树模板 Kruskal算法 #include<iostream> #include<algorithm> #include<stdio.h> #in ...
- POJ-图论-最小生成树模板
POJ-图论-最小生成树模板 Kruskal算法 1.初始时所有结点属于孤立的集合. 2.按照边权递增顺序遍历所有的边,若遍历到的边两个顶点仍分属不同的集合(该边即为连通这两个集合的边中权值最小的那条 ...
- POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解
题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...
- 最小生成树算法(Prim,Kruskal)
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- 【prim + kruscal 】 最小生成树模板
来源:dlut oj 1105: Zhuo’s Dream Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 40 Solved: 14[Submit][St ...
- 最小生成树(Kruskal和Prim算法)
关于图的几个概念定义: 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...
- 洛谷P3366 【模板】最小生成树(Kruskal)
题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...
- 最小生成树的Kruskal算法实现
最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...
- 最小生成树之Kruskal
模板题,学习一下最小生成树的Kruskal算法 对于一个连通网(连通带权图,假定每条边上的权均为大于零的实数)来说,每棵树的权(即树中所有边的权值总和)也可能不同 具有权最小的生成树称为最小生成树 生 ...
随机推荐
- python使用pudb调试
pudb是pdb的升级版本 安装 pip3 install pudb 使用方法 在程序文件的开头导入包 from pudb import set_trace set_trace()#断点位置 运行的时 ...
- webpack打包生成多个vendor的配置方法
用webpack打包项目的时候,一般喜欢把一些公用的库打包的vendor.js里面,比如像react,react-router,redux等. 随着引入的库越来越多,vendor文件也变得越来越大,于 ...
- SQL Server Profiler 常见问题总结
1.跟踪指定数据库 SELECT DB_ID('数据名称') 原文:https://jingyan.baidu.com/article/647f0115be128a7f2048a87d.html 2. ...
- 转-CSRF&OWASP CSRFGuard
一. 什么是CSRF?CSRF(Cross-Site Request Forgery)直译的话就是跨站点请求伪造也就是说在用户会话下对某个需要验证的网络应用发送GET/POST请求——而这些请求是未经 ...
- zabbix添加对haproxy的监控
zabbix添加对haproxy的监控 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy本身提供一个web页面 ...
- Ex 2_23 如果一个数组超过半数的元素都相同时,该数组被称为含有一个主元素..._第二次作业
将数组A划分为两个数组A1和A2 ,各含有A的一半元素或一半多一个.若A中含有主元素x,则A1和A2中至少有一个数组含有主元素x,对A1和A2递归地计算有无主元素,若A只含有一个元素,则A的主元素就是 ...
- mybatis xml中不能直接用大于号、小于号要用转义字符
2.使用 <![CDATA[ ]]>标记
- 在线HTTP POST/GET接口测试工具 - aTool在线工具
百度搜索标题或直接访问网址如下 网址:http://www.atool.org/httptest.php 很好用的在线http get/post 测试工具
- centos6.5 有趣但是没有用的linux命令
小火车 get http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-rele ...
- maven install 报错 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
1.控制台打印信息 [INFO] Scanning for projects... [INFO] [INFO] ---------------------< org.cqupt.mauger:R ...