HDU1233(Kruskal&Prim两解)
Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5 Huge input, scanf is recommended.
//Kruskal
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
const int maxn=;
#define ms(x,n) memset(x,n,sizeof x);
const int inf=0x3f3f3f3f;
using namespace std;
int n,m;
int u,v,w,parent[maxn];//ranks[maxn];
struct node
{
int u,v,w;
node(){u=,v=,w=inf;}
//node(int uu,int vv,int ww){u=uu,v=vv,w=ww;}
}edge[maxn*maxn];
bool cmp(node a,node b)
{
return a.w<b.w;
}
int init(int n)
{
for(int i=;i<=n;i++)
parent[i]=-;//,ranks[i]=-1;
}
int finds(int x)
{
if(parent[x]<) return x;
return parent[x]=finds(parent[x]);
}
void unions(int x,int y)
{
x=finds(x),y=finds(y);
if(x==y) return;
if(parent[x]<parent[y])
{
parent[x]+=parent[y];
parent[y]=x;
}
else
{
parent[y]+=parent[x];
parent[x]=y;
}
}
int kruskal()
{
sort(edge+,edge+m+,cmp);
init(n);
int ans=;
for(int i=;i<=m;i++)
{
node a=edge[i];
if(finds(a.u)!=finds(a.v))
{
unions(a.u,a.v);
ans+=a.w;
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
while(~scanf("%d",&n),n)
{
m=n*(n-)/;
for(int i=;i<=m;i++)
edge[i]=node();
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&edge[i].u,&edge[i].v,&w);
edge[i].w=min(edge[i].w,w);
}
printf("%d\n",kruskal());
}
return ;
}
//Prim
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#define ms(x,n) memset(x,n,sizeof x);
const int maxn=;
const int inf=0x3f3f3f3f;
using namespace std;
int d[maxn],g[maxn][maxn];
int n;
bool vis[maxn];
void prim()
{
int i,j,k,tmp,ans=;
ms(d,0x3f);
ms(vis,);
d[]=;
for(i=;i<=n;i++)
{
tmp=inf;
for(j=;j<=n;j++)
{
if(!vis[j]&&tmp>d[j])
{
tmp=d[j];
k=j;
}
}
vis[k]=;
ans+=tmp;
for(j=;j<=n;j++)
{
if(!vis[j]&&d[j]>g[k][j])
d[j]=g[k][j];
}
}
cout<<ans<<endl;
}
int main()
{
while(~scanf("%d",&n),n)
{
int m=n*(n-)/;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j)
g[i][j]=inf;
else
g[i][j]=;
for(int i=;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u][v]=g[v][u]=w;
}
prim();
}
return ;
}
HDU1233(Kruskal&Prim两解)的更多相关文章
- hdu1233 最小生成树Prim算法和Kruskal算法
Prim算法 时间复杂度:O(\(N^2\),N为结点数) 说明:先任意找一个点标记,然后每次找一条最短的两端分别为标记和未标记的边加进来,再把未标记的点标记上.即每次加入一条合法的最短的边,每次扩展 ...
- POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解
题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...
- 最小生成树(Kruskal+Prim)--模板
最小生成树-----在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. 应用场景 1.假设以下情景,有一块木板,板上钉上了一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通 ...
- 最小生成树模板【kruskal & prim】
CDOJ 1966 Kruskal 解法 时间复杂度O(mlogm) m为边数,这里主要是边排序占时间,后面并查集还好 #include <cstdio> #include <cst ...
- uva 10034 Freckles (kruskal||prim)
题目上仅仅给的坐标,没有给出来边的长度,不管是prim算法还是kruskal算法我们都须要知道边的长度来操作. 这道题是浮点数,也没啥大的差别,处理一下就能够了. 有关这两个算法的介绍前面我已经写过了 ...
- 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题
链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...
- 最小生成树算法总结(Kruskal,Prim)
今天复习最小生成树算法. 最小生成树指的是在一个图中选择n-1条边将所有n个顶点连起来,且n-1条边的权值之和最小.形象一点说就是找出一条路线遍历完所有点,不能形成回路且总路程最短. Kurskal算 ...
- 继续畅通工程(kruskal prim)
kruskal算法 #include <cstdio > #include <algorithm> using namespace std; const int MaxSi ...
- 算法笔记_066:Kruskal算法详解(Java)
目录 1 问题描述 2 解决方案 2.1 构造最小生成树示例 2.2 伪码及时间效率分析 2.3 具体编码(最佳时间效率) 1 问题描述 何为Kruskal算法? 该算法功能:求取加权连通图的最小 ...
随机推荐
- Java - 线程池设计与选择
http://ifeve.com/how-to-calculate-threadpool-size/ 任务一般可分为:CPU密集型.IO密集型.混合型,对于不同类型的任务需要分配不同大小的线程池. C ...
- ssr 之Nuxt.js
ssr:server side rendering(服务端渲染),目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...
- Android系统常用URI
android系统常用URI android系统管理联系人的URI如下: ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri ContactsContrac ...
- PyCharm 安装 pip
打开 File --> Settings --> Project Interpreter --> 点击右边 + 号 --> 搜索栏输入 pip --> 点击 Instal ...
- phothoshop 快捷键
界面构成: 1 菜单栏 2 工具箱 3 工具属性栏 4 悬浮面板(辅助作用) CTRL + N 新建对话框(对画布进行设置) 回车确定 CTRL + O (字母) 打开对话框(选择图片) 画布的三种显 ...
- SEO高手和SEO屌丝的八个区
原文:http://www.it28.cn/sousuoyinqing/853085.html SEO这个行业并不规范,有些seo工程师可以拿着高薪,进行一些大型网站的seo工作,其实主要是UEO的工 ...
- .Net Core(一)环境搭建与基本使用
.Net Core(一)环境搭建与基本使用 一.系统配置 a) Linux下如果想要打开类似任务管理器,可以使用top命令,在控制台会动态刷新CPU和内存占用.进程等信息.vmstat和free命令可 ...
- gson解析json
json介绍 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本 ...
- tkinter做一个简单的登陆页面(十六)
做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...
- SQL Server 2000详细安装过程及配置
说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,虽然现如今SQL Server 2000软件早已经过时了,但仍然有一部分人在使用它,尤 ...