hdu 1102 Constructing Roads(kruskal || prim)
求最小生成树。有一点点的变化,就是有的边已经给出来了。所以,最小生成树里面必须有这些边,kruskal和prim算法都能够,prim更简单一些。有一点须要注意,用克鲁斯卡尔算法的时候须要将已经存在的边预处理一下,并查集转化为同一个祖先。记得要找他们的祖先再转化。普里姆算法仅仅须要将那些已经存在的边都初始化为0就能够了。
kruskal:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define MAX 0x7fffffff using namespace std;
struct node
{
int i,j,len;
}gra[10005];
int p[105];
int n;
int cmp(const void *a,const void *b)
{
return ((node *)a)->len - ((node *)b)->len;
}
int find(int x)
{
return p[x] == x? x: (p[x] = find(p[x]));
}
void kruskal()
{
int i,sum = 0;
for(i=1; i<=n*n; i++)
{
int x = find(gra[i].i);
int y = find(gra[i].j);
if(x != y)
{
sum += gra[i].len;
p[x] = y;
}
}
cout << sum << endl;
return ;
}
int main()
{
int i,j,m,c;
while(cin >> n)
{
int k = 1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
cin >> c;
gra[k].i = i;
gra[k].j = j;
gra[k].len = c;
k ++;
}
cin >> m;
for(i=1; i<=n; i++)
p[i] = i;
int a ,b;
for(i=1; i<=m; i++)
{
cin >> a >> b;
a = find(a);//注意这里。wa了几次。。。要找他们的祖先。。 。
b = find(b);
p[a] = b;
}
qsort(gra+1,k-1,sizeof(gra[0]),cmp);
kruskal();
}
return 0;
}
prim:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define MAX 0x7fffffff using namespace std;
int gra[105][105];
int n;
void prim()
{
int visit[105],now,i,j;
int d[105];
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
d[i] = MAX;
now = 1;visit[1] = 1;
d[1] = 0;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
if(!visit[j] && d[j]>gra[now][j])
d[j] = gra[now][j];
int MIN = MAX;
for(j=1; j<=n; j++)
{
if(!visit[j] && MIN > d[j])
MIN = d[now=j];
}
visit[now] = 1;
}
int sum = 0;
for(j=1; j<=n; j++)
sum += d[j];
cout << sum << endl;
return ;
}
int main()
{
int i,j,c;
while(cin >> n)
{
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
cin >> c;
gra[i][j] = c;
} int m,a,b;
cin >> m;
for(i=1; i<=m; i++)
{
cin >> a >> b;
gra[a][b] = gra[b][a] = 0;
}
prim();
}
return 0;
}
hdu 1102 Constructing Roads(kruskal || prim)的更多相关文章
- HDU 1102 Constructing Roads, Prim+优先队列
		题目链接:HDU 1102 Constructing Roads Constructing Roads Problem Description There are N villages, which ... 
- hdu 1102    Constructing Roads  (Prim算法)
		题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ... 
- HDU 1102 Constructing Roads(kruskal)
		Constructing Roads There are N villages, which are numbered from 1 to N, and you should build some r ... 
- hdu 1102 Constructing Roads(最小生成树 Prim)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ... 
- HDU 1102(Constructing Roads)(最小生成树之prim算法)
		题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Ja ... 
- hdu 1102 Constructing Roads (最小生成树)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ... 
- HDU 1102 Constructing Roads (最小生成树)
		最小生成树模板(嗯……在kuangbin模板里面抄的……) 最小生成树(prim) /** Prim求MST * 耗费矩阵cost[][],标号从0开始,0~n-1 * 返回最小生成树的权值,返回-1 ... 
- hdu 1102 Constructing Roads  Kruscal
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:这道题实际上和hdu 1242 Rescue 非常相似,改变了输入方式之后, 本题实际上更 ... 
- HDU 1102 Constructing Roads
		Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ... 
随机推荐
- npm install报错类似于npm WARN tar ENOENT: no such file or directory, open '***\node_modules\.staging\***
			报错类似于如下图 解决方法: 删除文件 package-lock.json,再重新执行npm i或者npm install 
- java jar打包命令使用
			用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的 ... 
- Centos7&docker-ce&compose&wordpress
			如题,最近帮人装个WordPress,想起来用docker方便,这里做个记录. 原文:https://my.oschina.net/finchxu/blog/2877580 因为docker要求lin ... 
- PNG文件结构分析
			http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/ PNG文件结构分析 对于一个PNG文件来说,其文件头总是由 ... 
- 洛谷 P2926 [USACO08DEC]拍头Patting Heads
			P2926 [USACO08DEC]拍头Patting Heads 题目描述 It's Bessie's birthday and time for party games! Bessie has i ... 
- HDU 3108 Ant Trip
			Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ... 
- 将一个文件夹纳入library或者移除remove
			https://support.microsoft.com/en-us/help/4026298/windows-show-libraries-in-file-explorer To show lib ... 
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
			摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ... 
- thinkPHP的模板是做什么用的
			thinkPHP的模板是做什么用的 问题 为什么PHP中ThinkPHP有做类似模板引擎的东西?smarty也是?这些到底有何用? 我是真没发现它们的用处在哪里?分离了前端和PHP的依赖?HTML文件 ... 
- django 笔记11 装饰器
			在views.py创建 一般用来cookies的装饰器 def auth(func): def inner(request, *args, **kwargs): v = request.COOKIES ... 
