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 ...
随机推荐
- str 数据类型的用法
---------------------------------------------------------------------------------------------------- ...
- mac终端安装webpack的时候报错Err,解决的办法 sudo npm install webpack -g
MacBook-Air:~ xxx$ npm install webpack -g npm WARN invalid config registry="" npm WARN inv ...
- react-native之文件上传下载
目录 文件上传 1.文件选择 2.文件上传 1.FormData对象包装 2.上传示例 文件下载 最近react-native项目上需要做文件上传下载的功能,由于才接触react-native不久,好 ...
- virtual box虚拟机在linux下设置共享文件夹
使用的虚拟机版本是:VirtualBox-5.2.8-121009 使用的linux版本是:Ubuntu 12.04.5 LTS 和 Linux Mint 19 Tara 1. 安装增强功能包(Gue ...
- django xadmin插件 的基本用法 1
1 安装或导入 xadmin 1 pip 安装 2 源码导入 在新建项目中新建extra_apps文件夹并将下载后的源码解压放入 (推荐,方便后续我们可以在源码中自定义一些插件的使用) 注: 具体可 ...
- C++容器(五):set类型
set类型 map容器是键-值对的集合,好比以任命为键的地址和电话号码.而set容器只是单纯的键的集合.当只想知道一个值是否存在时,使用set容器是最适合. 使用set容器必须包含set头文件: #i ...
- hadoop-01-ssh无密登录配置
1,分配master机器2台,slave机器5台: 2,在全部机器上面配置/etc/hosts设置 3,全部机器上面进行ntp设置:TODO 4,在master机器上面: 不要用root登录 1) s ...
- bzoj1430: 小猴打架(prufer序列)
1430: 小猴打架 题目:传送门 简要题意: n只互不相识的猴子打架,打架之后就两两之间连边(表示已经相互认识),只有不认识(朋友的朋友都是朋友)的两只猴子才会打架.最后所有的猴子都会连成一棵树,也 ...
- BZOJ 3123 主席树 启发式合并
思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...
- CUDA笔记(七)
今天集中时间找程序的问题.于是发现: 首先,程序里的kernel想要调试,必须用nsight. 于是一堆找.http://www.nvidia.com/object/nsight.html http: ...