Kruskal算法struct Edge
{
int from;
int to;
int w;
}; Edge Edges[200200]; int father[200200],N,M; int find(int x)
{
if(x != father[x])
father[x] = find(father[x]...
分类:
其他好文 时间:
2015-05-03 00:51:15
阅读次数:
211
最小生成树kruskal算法。
首先必须形成一棵最小生成树,然后找出最长的路。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m,a,b,c,par[1005],rankk[1005], max_road;
struct edge {
int u,v,c...
分类:
其他好文 时间:
2015-05-01 12:08:49
阅读次数:
147
最大生成树,只需要变一下改变值的部分就可以了。
尝试了一下运用并查集的kruskal算法,与prim相比各有利弊吧,还要根据数据特点适当选取。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m,a,b,c,par[1005],rankk[1005];
struc...
分类:
其他好文 时间:
2015-05-01 10:44:48
阅读次数:
130
#include
#include
struct edge{
int u;
int v;
int w;//为了方便排序这里穿件一个结构体来存储边的关系
}e[10];
int n,m;
int f[10]={0},sum=0,count=0;//并查集需要得到的一些变量
//f数组大小根据实际情况来设置,要比n的最大值大1
//排序
int cmp(const void *a,const voi...
分类:
其他好文 时间:
2015-04-28 16:11:27
阅读次数:
124
这题,典型的最小生成树问题,可以用Kruskal算法来实现,配合着并查集来高效求解。
先将各边按权值进行从小到大排列。遍历一个各边便可求解,时间复杂度为O(|E|log|V|),其中E为边的个数,V为顶点数。
下面是AC代码,代码中有注释:
#include
#include
#include
using namespace std;
class data ...
分类:
其他好文 时间:
2015-04-27 15:16:20
阅读次数:
127
越来越明白了一个道理:你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!!
以前写过最小生成树,但是,水了几道题后,过了一段时间,就会忘却,一点也写不出来了。也许原因只有一个,那就是我没有彻底理解这两种算法。
主题:
其实,求最小生成树有两个要点,一个是权值最小,还有一个就是这个图必须是树。而Prime和Kruskal的不同之处在于两者选择的变量不同,Prime选择的是始终保持...
分类:
编程语言 时间:
2015-04-26 09:23:26
阅读次数:
186
【题目链接】:click here~~
【题目大意】:已知某几条道路已经修完,求全部道路要通路的最小花费
【解题思路】:基础的Kruskal算法了,按照边的权值从小到大排序一遍,符合条件加入到生成树中
代码:
/*
Author:HRW
kruskal+并查集
*/
#include
using namespace std;
const int max_v=105;
const int...
分类:
编程语言 时间:
2015-04-25 10:45:48
阅读次数:
208
Kruskal算法:
1:按照边的权值的顺序从小到大查看一遍,如果不产生圈(重边也算),就把当前这条边加入到生成树中,基本算法证明和prim一样
2:如何判断是否产生负圈,假设现在要把连接顶点u和顶点v的边e加入到生成树中,如果加入之前u和v不在同一个联通分量里,那么加入e也不会产生负圈,反之,如果u和v在同一个连通分量里,那么一定会产生圈,可以使用并查集高效的判断是否属于同一个连通分量
P...
分类:
编程语言 时间:
2015-04-24 22:48:54
阅读次数:
187
main.h:
#include
#include
#define DefaultSize 10
#define maxWeight -1
using namespace std;
template
struct Edge
{
int dest;
E cost;
Edge *link;
Edge(int d=0,int c=0):dest(d),cost(c),link(NUL...
分类:
编程语言 时间:
2015-04-20 15:04:14
阅读次数:
213
把码头作为0点处理。
首先判断不建码头是否可以生成最小生成树
最小生成树用kruskal算法,若对于代价
若可以:Min(最小生成树(不建码头),最小生成树(建码头));
若不可:最小生成树(建码头)
#include "stdio.h"
#include "string.h"
#include "algorithm"
using namespace std;
int fathe...
分类:
其他好文 时间:
2015-04-09 17:22:59
阅读次数:
180