POJ 2421 Constructing Roads(Kruskal算法)
题意:给出n个村庄之间的距离,再给出已经连通起来了的村庄。求把所有的村庄都连通要修路的长度的最小值。
思路:Kruskal算法
课本代码:
//Kruskal算法
#include<iostream>
using namespace std; int fa[120];
int get_father(int x){
return fa[x]=fa[x]==x?x:get_father(fa[x]);//判断两个节点是否属于一颗子树(并查集)
}
int main(){
int n;
int p[120][120];
while(scanf("%d",&n)!=EOF){
int i,j,k,m;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&p[i][j]);
for(i=0;i<n;i++) fa[i]=i;
scanf("%d",&m);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
fa[get_father(a-1)]=get_father(b-1);// a 合并到 b
}
int ans=0;
for(k=1;k<=1000;k++)// kruskal 算法,这里每个长度都进循环,若加一个长度存在的标记,可以节省时间
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j]==k &&get_father(i)!=get_father(j)){
fa[fa[i]]=fa[j];//合并两颗子树(并查集)
ans+=k;
}
printf("%d\n",ans);
}
return 0;
}
代码2:加了mark标记长度是否存在,代码中-------------为添加部分
//Kruskal算法
#include<iostream>
using namespace std; int fa[120];
int mark[1010];//-------------标记长度是否存在
int get_father(int x){
return fa[x]=fa[x]==x?x:get_father(fa[x]);//判断两个节点是否属于一颗子树(并查集)
}
int main(){
int n;
int p[120][120];
while(scanf("%d",&n)!=EOF){
memset(mark,0,sizeof(mark));
int i,j,k,m;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
scanf("%d",&p[i][j]);
mark[p[i][j]]=1;//-------------把当前的长度标记一下
}
for(i=0;i<n;i++) fa[i]=i;
scanf("%d",&m);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
fa[get_father(a-1)]=get_father(b-1);// a 合并到 b
}
int ans=0;
for(k=1;k<=1000;k++)// kruskal 算法
if(mark[k]){// -------------------长度存在的时候,再进入这个循环
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j]==k &&get_father(i)!=get_father(j)){
fa[fa[i]]=fa[j];//合并两颗子树(并查集)
ans+=k;
}
}
printf("%d\n",ans);
}
return 0;
}
POJ 2421 Constructing Roads(Kruskal算法)的更多相关文章
- POJ 2421 Constructing Roads (Kruskal算法+压缩路径并查集 )
Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19884 Accepted: 83 ...
- POJ 2421 Constructing Roads (最小生成树)
Constructing Roads Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- poj 2421 Constructing Roads 解题报告
题目链接:http://poj.org/problem?id=2421 实际上又是考最小生成树的内容,也是用到kruskal算法.但稍稍有点不同的是,给出一些已连接的边,要在这些边存在的情况下,拓展出 ...
- POJ 2421 Constructing Roads (最小生成树)
Constructing Roads 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/D Description There ar ...
- POJ - 2421 Constructing Roads 【最小生成树Kruscal】
Constructing Roads Description There are N villages, which are numbered from 1 to N, and you should ...
- POJ - 2421 Constructing Roads (最小生成树)
There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...
- POJ 2421 Constructing Roads
题意:要在n个城市之间建造公路,使城市之间能互相联通,告诉每个城市之间建公路的费用,和已经建好的公路,求最小费用. 解法:最小生成树.先把已经建好的边加进去再跑kruskal或者prim什么的. 代码 ...
- [kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads
给一个n个点的完全图 再给你m条道路已经修好 问你还需要修多长的路才能让所有村子互通 将给的m个点的路重新加权值为零的边到边集里 然后求最小生成树 #include<cstdio> #in ...
- POJ 2421 Constructing Roads(最小生成树)
Description There are N villages, which are numbered from 1 to N, and you should build some roads su ...
随机推荐
- 在Servlet的GenericServlet类中为什么有两个init()方法
想要搞清楚这件事情,必须先了解Servlet容器调用Servlet的过程.调用过程如下 首次访问该Servlet1.调用init(ServletConfig config) 进行初始化,Servlet ...
- JQ 修改样式
//获取当前的url var url=document.location.href; var url_cn='http://www.macau-airport.com/cn/our-business/ ...
- (转) 对svn分支合并类型和深度的理解
合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分 ...
- json性能测试
http://www.open-open.com/lib/view/open1434377191317.html
- js父页面和子页面之间传值
今天和朋友一块讨论,怎样通过js在父页面和子页面之间传值的问题,总结例如以下: 需求描写叙述:父页面有多个子页面.实如今父页面点击子页面,传值到子页面. 看着非常easy,试了好久.主要纠结在怎样获取 ...
- Android hellocharts 柱形图详解
近日需要做图表结构的项目,目前最火的就是hellocharts 和MPAndroidChart 相对来说hellocharts集成比较简单: 官网地址 https://github.com/l ...
- 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
[BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...
- Office 365系列(-)
昨天参加上海微软TechED技术大会,看见很多传说中的大牛,听了涂曙光老师等人的讲座,激情澎湃啊,看见他们对技术以及程序员社区的投入及激情,十分敬佩.自己搞IT行业也已经10多年了,平常都很少写博客和 ...
- Sum of Remainders(数学题)
F - Sum of Remainders Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I ...
- Brain Network (medium)(DFS)
H - Brain Network (medium) Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d &am ...