HDU 5253 最小生成树(kruskal)+ 并查集
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 1000010
using namespace std;
struct node
{
int a;//端点1
int b;//端点2
int num;//权值
};
bool cmp(node x,node y)//按权值升序
{
return x.num<y.num;
}
int maps[1003][1003];
node edge[N*2];//边数=2mn-m-n<2mn
int father[N];
int r[N];
int finds(int x)
{
if(father[x]!=x)
father[x]=finds(father[x]);
return father[x];
}
void connect(int a,int b)
{
if(r[a]>r[b])
father[b]=a;
else if(r[a]<r[b])
father[a]=b;
else
{
father[a]=b;
r[b]++;
}
}
int main()
{
int T,cas=1,n,m,ans,id;
int i,j;
scanf("%d",&T);
while(T--)
{
int numedge=0;//边数
ans=0;
memset(r,0,sizeof(r));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
scanf("%d",&maps[i][j]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
id=(i-1)*m+j;
father[id]=id;
if(i<n)//除最后一行外
{
numedge++;
edge[numedge].a=id;
edge[numedge].b=i*m+j;
edge[numedge].num=abs(maps[i][j]-maps[i+1][j]);
}
if(j<m)//除最后一列外
{
numedge++;
edge[numedge].a=id;
edge[numedge].b=(i-1)*m+j+1;
edge[numedge].num=abs(maps[i][j]-maps[i][j+1]);
}
}
}
sort(edge+1,edge+numedge+1,cmp);//权值排序
for(i=1;i<=numedge;i++)
{
int x=finds(edge[i].a);
int y=finds(edge[i].b);
if(x!=y)
{
connect(x,y);
ans+=edge[i].num;
}
}
printf("Case #%d:\n%d\n",cas++,ans);
}
return 0;
}
HDU 5253 最小生成树(kruskal)+ 并查集的更多相关文章
- Minimum Spanning Tree.prim/kruskal(并查集)
开始了最小生成树,以简单应用为例hoj1323,1232(求连通分支数,直接并查集即可) prim(n*n) 一般用于稠密图,而Kruskal(m*log(m))用于系稀疏图 #include< ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- TOJ 2815 Connect them (kruskal+并查集)
描述 You have n computers numbered from 1 to n and you want to connect them to make a small local area ...
- hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...
- Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- POJ 3723 Conscription (Kruskal并查集求最小生成树)
Conscription Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14661 Accepted: 5102 Des ...
- hdu 3938 Portal(并查集+离线+kruskal)2011 Multi-University Training Contest 10
搜了题解才把题搞明白.明白之后发现其实题意很清晰,解题思路也很清晰,只是题目表述的很不清晰…… 大意如下—— 给你一个无向图,图中任意两点的距离是两点间所有路径上的某一条边,这条边需要满足两个条件:1 ...
- hdu 1863 畅通工程(Kruskal+并查集)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- [CF891C] Envy - Kruskal,并查集
给出一个 n 个点 m条边的无向图,每条边有边权,共 Q次询问,每次给出 \(k\)条边,问这些边能否同时在一棵最小生成树上. Solution 所有最小生成树中某权值的边的数量是一定的 加完小于某权 ...
随机推荐
- hdu 4033Regular Polygon(二分+余弦定理)
Regular Polygon Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)T ...
- nyoj------170网络的可靠性
网络的可靠性 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 A公司是全球依靠的互联网解决方案提供商,也是2010年世博会的高级赞助商.它将提供先进的网络协作技术,展 ...
- JavaScript第一部分
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- backbonejs mvc框架的增删查改实例
一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...
- [转]玩转Google开源C++单元测试框架Google Test系列
gtest的官方网站是: http://code.google.com/p/googletest/ 从官方的使用文档里,你几乎可以获得你想要的所有东西 http://code.google.com/p ...
- 一个快速查看API的汇编和机器码的工具.发布源码
提供一个早年写的一个小工具,一直在用,赶紧很顺手,特推荐给大家. 欢迎垂询. 1,在OD正在跟踪分析某个保护壳的一段code的时候,感觉似曾相识,好像在哪里见过,好像是某个API.----这个时候你就 ...
- POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*( ...
- Elasticsearch Java Api--DeleteByQuery
一.安装插件 要删除某个索引的一个type下的所有文档,相当于关系型数据库中的清空表操作.查阅了一些资料可以通过Delete-by-Query插件删除,首先使用插件管理器安装Delete-by-Que ...
- [转载]Matrix类的使用
2013-12-18 11:31:00 转载自: http://www.cnblogs.com/mmy0925/archive/2013/01/22/2871009.html 在Android中,对图 ...
- NLTk
1.python的nltk中文使用和学习资料汇总帮你入门提高 http://blog.csdn.net/huyoo/article/details/12188573