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】的更多相关文章

  1. 最小生成树(Kruskal+Prim)--模板

    最小生成树-----在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. 应用场景 1.假设以下情景,有一块木板,板上钉上了一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通 ...

  2. poj 1258 最小生成树 模板

    POJ 最小生成树模板 Kruskal算法 #include<iostream> #include<algorithm> #include<stdio.h> #in ...

  3. POJ-图论-最小生成树模板

    POJ-图论-最小生成树模板 Kruskal算法 1.初始时所有结点属于孤立的集合. 2.按照边权递增顺序遍历所有的边,若遍历到的边两个顶点仍分属不同的集合(该边即为连通这两个集合的边中权值最小的那条 ...

  4. POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解

    题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...

  5. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  6. 【prim + kruscal 】 最小生成树模板

    来源:dlut oj 1105: Zhuo’s Dream Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 40 Solved: 14[Submit][St ...

  7. 最小生成树(Kruskal和Prim算法)

    关于图的几个概念定义:          关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...

  8. 洛谷P3366 【模板】最小生成树(Kruskal)

    题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...

  9. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

  10. 最小生成树之Kruskal

    模板题,学习一下最小生成树的Kruskal算法 对于一个连通网(连通带权图,假定每条边上的权均为大于零的实数)来说,每棵树的权(即树中所有边的权值总和)也可能不同 具有权最小的生成树称为最小生成树 生 ...

随机推荐

  1. awk入门【转】

    awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. 一.基本用法 awk的基本用法就是下面的形式. # 格式 $ awk 动作 文件名 # 示 ...

  2. python3+selenium框架设计08-进一步实现POM

    之前都是只有一个页面,一个用例.这次两个页面.两个测试用例.其实界面自动化测试最大的难点在于driver的传递,需要保持唯一性.另外就是断言的难点. 修改之前的BaiduPage,新增部分代码 fro ...

  3. Win2008R2配置WebDeploy发布网站

    一.配置服务器 1.安装管理服务 2.点击管理服务进行配置 二.安装WebDeploy 2.1通过离线安装包方式安装: https://www.iis.net/downloads/microsoft/ ...

  4. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  5. 026_lsof命令经验总结

    一.lsof处理删除文件未释放句柄问题. 但是如果你不知道是哪个文件,或者是很多文件都有这样的情况,那你需要使用如下命令 lsof |grep deleted 注:这个deleted表示该已经删除了的 ...

  6. ASP.NET MVC5高级编程 之 Ajax

    jQuery不仅支持所有现代浏览器,包括IE.Firefox.Safari.Opera和Chrome等,还可以在编写代码和浏览器API冲突时隐藏不一致性(和错误). 1. jQuery jQuery擅 ...

  7. HDU 1077

    题意 : 给你 N 个点, 问一个单位圆最大能包括几个点 直接暴力枚举圆心, 计算个数        O(n^ 3): 精度,细节都要注意, //#include<bit/stdc++.h> ...

  8. 【原创】Linux基础之命令行浏览器links

    有时服务器环境受限,比如在内网环境不能暴露端口从外网访问,用curl看html代码比较累,这时可以使用命令行浏览器来查看相关页面 links 官方:http://links.twibright.com ...

  9. Struts2,springMVC获取request和response

    springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request;   protected H ...

  10. rsyslog的安装、使用、详解

    操作系统:CentOS release 6.7 download yum repo file:rsyslogall.repo [rsyslog-v8-stable] name=Adiscon Rsys ...