hdu1879 prim和kruskal两种算法。

//prim看不懂的看看思想就容易懂啦
#include <stdio.h>
#include <string.h>
#define inf 0x3fffffff
int map[101][101],flag[101],minpos[101],n,m,pos;
void prim()
{
	int t,p,min,sum=0;
	minpos[0]=t=1;
	flag[1]=1;
	while(t<n)
	{
		min=inf;
		for(int i=0;i<t;i++)
		{
			p=minpos[i];
			for(int j=1;j<=n;j++)
			if(map[p][j]<min&&!flag[j])
			min=map[p][j],pos=j;
		}
		sum+=min;
		minpos[t++]=pos;
		flag[pos]=1;
	}
	printf("%d\n",sum);
}
int main()
{
	int a,b,cost,aci;
	while(scanf("%d",&n)!=EOF&&n)
	{
		m=n*(n-1)/2;
		memset(flag,0,sizeof(flag));
		memset(map,inf,sizeof(map));
		for(int i=0;i<m;i++)
		{
			scanf("%d %d %d %d",&a,&b,&cost,&aci);
		    if(aci)
		    map[a][b]=map[b][a]=0;
		    else
		    map[a][b]=map[b][a]=cost;
		}

		prim();
	}
	return 0;
}
//kruskal
<pre name="code" class="cpp">#include <stdio.h>
#include <algorithm>
using namespace std;
int fa[105];
struct node
{
	int a,b,cost;
}c[5005];
bool cmp(node x,node y)
{
	return x.cost<y.cost;
}
int find(int x)
{
	if(fa[x]!=x) fa[x]=find(fa[x]);
	return fa[x];
}
int main()
{
	int aci,n;
	while(scanf("%d",&n)!=EOF&&n)
	{
		for(int i=1;i<=n;i++)
		fa[i]=i;
		for(int i=0;i<n*(n-1)/2;i++)
		{
			scanf("%d %d %d %d",&c[i].a,&c[i].b,&c[i].cost,&aci);
			if(aci)
			c[i].cost=0;
		}
		sort(c,c+n*(n-1)/2,cmp);
		int sum=0;
		for(int i=0;i<n*(n-1)/2;i++)
		{
			int x_a=find(c[i].a);
			int y_b=find(c[i].b);
			if(x_a!=y_b)
			fa[x_a]=y_b,sum+=c[i].cost;
		}
		printf("%d\n",sum);
	}
	return 0;
}

时间: 2024-10-06 15:24:58

hdu1879 prim和kruskal两种算法。的相关文章

hdu 1162 Eddy&#39;s picture 最小生成树入门题 Prim+Kruskal两种算法AC

Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7428    Accepted Submission(s): 3770 Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to

hdu 3371 Connect the Cities Prim + Kruskal两种算法分别AC 水过~~~~

Connect the Cities Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11727    Accepted Submission(s): 3278 Problem Description In 2100, since the sea level rise, most of the cities disappear. Tho

hdu 1863 畅通工程 最小生成树模板入门题 prim+kruskal两种算法AC。

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18866    Accepted Submission(s): 8012 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

最小生成树的两种算法:Prim和Kruskal算法

越来越明白了一个道理:你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!! 以前写过最小生成树,但是,水了几道题后,过了一段时间,就会忘却,一点也写不出来了.也许原因只有一个,那就是我没有彻底理解这两种算法. 主题: 其实,求最小生成树有两个要点,一个是权值最小,还有一个就是这个图必须是树.而Prim和Kruskal的不同之处在于两者选择的变量不同,Prim选择的是始终保持权值最小,然后逐个加点构建一棵树.而Kruskal则是始终保证是一棵树(虽然构建过程中不一定是真正的树,但并查

重拾算法(5)——最小生成树的两种算法及其对比测试

重拾算法(5)——最小生成树的两种算法及其对比测试 什么是最小生成树 求解最小生成树(Minimum Cost Spanning Tree,以下简写做MST)是图相关的算法中常见的一个,用于解决类似如下的问题: 假设要在N个城市之间建立通信联络网,那么连通N个城市只需N-1条线路.这时自然会考虑这样一个问题:如何在最节省经费的前提下建立这个通信网. 在任意两个城市间都可以设置一条线路,相应地都要付出一定的经济代价.N个城市之间最多可能设置N(N-1)/2条线路,那么如何在这些线路中选择N-1条,

次小生成树的两种算法

一."换边"算法 用Kruskal求最小生成树,标记用过的边.求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就是次小的生成树.可以证明:最小生成树与次小生成树之间仅有一条边不同. 这样相当于运行m次Kruskal算法. 复杂度O(m^2) 示例代码: int Kruskal_MinTree() { int u,v; init(); int i,flag,cnt; minedge = 0; flag = cnt = 0; int tmp = 0;

PHP实现指定时间的n月之前的这一天的两种算法

/** *根据$endtime,返回指定$monthes月之前的日 */ function severalMonthAgo($endtime,$monthes){ if (!$endtime) { return false; } if (!is_int($monthes) || $monthes <=0) { return false; } $m = date("m",$endtime); $y = date("Y",$endtime); $d = date(

[LeetCode][14]Longest Common Prefix解析 两种算法和底层源码的深入对比-Java实现

Q: Write a function to find the longest common prefix string amongst an array of strings. A: 这题的大概意思就是说给你一组字符串找出其中最长的哪个通用的前缀出来.这个东西不难找,但是如何找的又快又好不简单.其实这题本来就是easy题,但是却让我联想到了<数据结构与算法分析>上的一道题目,那道题目是这样的: 给一个8900个字的字典,从中间找出类似abc.bbc.abb这样单词中只有一个字母不同的单词进行

浅谈php随机不重复数的两种算法

先引入别人的一个秒表计时类(counttime.class.php): 1.先看第一个例子(大数中取少数): 1 <? 2 /* 3 @描述: Stopwatch这个类用户获取脚本执行时间 4 @作者: Klesti Hoxha <[email protected]> 5 */ 6 7 class Stopwatch { 8 private $start; 9 private $end; 10 private $markup_start = array(); 11 private $ma