hdu 5253 连接的管道 简单MST
来源:互联网 发布:window10引导ubuntu 编辑:程序博客网 时间:2024/06/05 08:57
题目链接
解法:kruskal+并查集
根据数据规模不能用搜索
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)#define mes(a,x,s) memset(a,x,(s)*sizeof a[0])#define mem(a,x) memset(a,x,sizeof a)#define ysk(x) (1<<(x))typedef long long ll;//const int INF = 0x3f3f3f3f ;const int maxn= 1000 ;int kase,T,n,m,nedge,N;int h[maxn+3][maxn+3];int dir[2][2]= { {+1,0},{0,+1} }; int par[(maxn+3)*(maxn+3)];bool in(int x,int y) { return 1<=x&&x<=n&&1<=y&&y<=m;}int get_id(int x,int y) { return (x-1)*m+y; }struct Edge{ int x,y,w; Edge(){} Edge(int x,int y,int w):x(x),y(y),w(w){} bool operator<(const Edge e)const { return w<e.w; }}e[ 2*(maxn+3)*(maxn+3) ];void init(){ nedge=0; for1(i,N) par[i]=i;}int find(int x) { return x==par[x]?x:par[x]=find(par[x]); }void MST(){ sort(e,e+nedge); // printf("nedge=%d\n",nedge); int ans=0,cnt=0; for(int i=0;i<nedge&&cnt<N-1;i++) { int x=e[i].x,y=e[i].y,w=e[i].w; int tx=find(x),ty=find(y); if(tx==ty) continue; par[tx]=ty; ans+=w; cnt++; // printf("connect -----%d -------%d\n",x,y); } printf("Case #%d:\n%d\n",++kase,ans);}int main(){ scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m);N=n*m; init(); for1(i,n) for1(j,m) scanf("%d",&h[i][j]); for1(i,n) for1(j,m) { int id=get_id(i,j); for0(k,2) { int ti=i+dir[k][0],tj=j+dir[k][1]; if(!in(ti,tj)) continue; int id2=get_id(ti,tj); e[nedge++]=Edge(id,id2,abs(h[i][j]-h[ti][tj]) ); } } MST(); } return 0;}
长期没写代码,find函数还写错了,结果超时,return x==par[x]?x:par[x]=find(par[x])
写成了return x==par[x]?x:find(par[x])
阅读全文
0 0
- hdu 5253 连接的管道 简单MST
- hdoj 5253 连接的管道 【MST】
- HDU 5253 连接的管道
- HDU 5253 连接的管道
- hdu 5253 连接的管道
- HDU 5253 连接的管道
- HDU 5253 连接的管道
- 【HDU 5253 连接的管道】
- HDU 5253:连接的管道
- HDU 5253 连接的管道
- HDU 5253-连接的管道
- 连接的管道-HDU
- hdu 5253 连接的管道(kruskal)
- hdu 5253连接的管道(kruskal)
- HDU-5253 连接的管道 (Kruskal)
- HDU 5253 连接的管道 —— 并查集
- 【HDU】5253-连接的管道(并查集)
- 连接的管道 HDU 杭电5253 【最小生成树】
- 桃之夭夭,灼灼其华
- 网页中JS函数自动执行的方法
- Oracle数据库备份与还原
- Android studio找不到HttpClient的问题
- cmd命令行下操作MySQL的常用命令
- hdu 5253 连接的管道 简单MST
- ubuntu mysql 5.7.18 远程连接
- 如何删除csdn的资源
- String str = "str"和String str = new String("str")的区别
- LeetCode 15. 3Sum
- NOIP 2011 Senior 2
- git 常用指令
- JDK1.8,LinkedCaseInsensitiveMap get方法返回null
- [NodeJS]创建HTTP、HTTPS服务器与客户端区别