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 ...
随机推荐
- vue实现tab栏切换
html <ul class="tab"> <li v-for="(item,index) in tabs" @click="tab ...
- 修改maven打包名字
仅需在pom.xml添加下列配置 build> <finalName>userapi</finalName> </build>
- Flux架构与Redux简介
Flux架构区别于传统的MVC架构 在facebook实践中, 当用户接收到新消息时,右上角会弹出你有一条新消息, 右下角的对话框也会提示有新消息, 如果用户在对话框中查看了新消息,那么右上角的这个新 ...
- shell学习日志
0.shell的变量同环境变量不同,存在用户环境区. 变量赋值的方式是: variable_name = variable_value a= "hello" $a对a进行取值 关于 ...
- python购物车系统
购物车系统模拟:product_list = [ ('java',100), ('python',200), ('键盘',500), ('电脑',4000), ('mac Book',7000),]S ...
- 洛谷 P1052 过河 (离散化+dp)
dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t 然后因为L非常大,所以我就不知道该怎么搞了 我看到m只有100,而L有1e9,我 ...
- Object-C,NSURL,统一资源定位器
今天晚上最后一个例子,写完休息娱乐一会. URL,统一资源定位器,可以定位网络上的一个资源. 没啥难的,还是对象.方法.API.和Java等语言没有啥区别. 不亲自一点点写一遍,印象不深,今后进一步深 ...
- ios开发经常使用到的第三方库
由于iOS SDK相对照较底层,所以开发人员就得受累多做一些体力活.只是幸运的是,有非常多第三方的类库能够用来简化非常多不必要的工作.经过作者团队的谨慎讨论.他们 评选出了10款可以极大提高iOS开发 ...
- HDU5053the Sum of Cube(水题)
HDU5053the Sum of Cube(水题) 题目链接 题目大意:给你L到N的范围,要求你求这个范围内的全部整数的立方和. 解题思路:注意不要用int的数相乘赋值给longlong的数,会溢出 ...
- Android 进程常驻(0)----MarsDaemon使用说明
版权声明:本文为博主原创文章,未经博主允许不得转载. 这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean mast ...