hdu1162 Eddy's picture(图论:最小生成树-minimal spanning tree)
来源:互联网 发布:pc装机必备软件 编辑:程序博客网 时间:2024/06/08 01:16
又是最小生成树...不对着模板还是写不来
计划先把数论的问题大致看下再看图论...
今天刷的一时兴起就随便做了
照常两种方法
prim()-15ms:
#include <cmath>#include <cstdio>#include <cfloat>#include <iostream>#include <algorithm>#define MAXN 110#define INF DBL_MAX#define LL long longusing namespace std;struct Point { double x, y;} a[MAXN];int n;double dis[MAXN];double getDis(int i, int j) { return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));}double prim(void) { int minnode, cur; double minedge, ans = 0.0; for(int i=0; i<n; ++i) dis[i] = INF; cur = 0; for(int i=0; i<n-1; ++i) { dis[cur] = -1.0; minedge = INF; for(int j=0; j<n; ++j) { if(j!=cur && dis[j]>=0.0) { dis[j] = min(dis[j], getDis(cur, j)); if(dis[j] < minedge) { minnode = j; minedge = dis[j]; } }// cout << "dis[" << j << "] = " << dis[j] << endl;// cout << "minedge = " << minedge << endl; } cur = minnode; ans += minedge; //cout << "cur = " << cur << "minedge = " << minedge << endl; } return ans;}int main(void) { while(scanf("%d", &n) != EOF) { for(int i=0; i<n; ++i) { cin >> a[i].x >> a[i].y; } printf("%.2f\n", prim()); }}
Kruskal()-0ms:
#include <cmath>#include <cstdio>#include <cfloat>#include <iostream>#include <algorithm>#define MAXN 11000#define INF DBL_MAX#define LL long longusing namespace std;int u[MAXN], v[MAXN], p[MAXN], r[MAXN];double w[MAXN];int m, n;struct Point { double x, y;} a[MAXN];double getDis(int i, int j) { return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));}int cmp(int i, int j) { return w[i] < w[j];}int find(int x) { return p[x]==x ? x : p[x]=find(p[x]);}double Kruskal(void) { double ans = 0.0; for(int i=0; i<n; ++i) p[i] = i; for(int i=0; i<m; ++i) r[i] = i; sort(r, r+m, cmp); for(int i=0; i<m; ++i) { int e = r[i]; int x = find(u[e]); int y = find(v[e]); if(x != y) { ans += w[e]; p[x] = y; } } return ans;}int main(void) { while(scanf("%d", &n) != EOF) { for(int i=0; i<n; ++i) { cin >> a[i].x >> a[i].y; } m = 0; for(int i=0; i<n; ++i) { for(int j=i+1; j<n; ++j) { u[m] = i; v[m] = j; w[m++] = getDis(i, j); } } printf("%.2f\n", Kruskal()); }}
0 0
- hdu1162 Eddy's picture(图论:最小生成树-minimal spanning tree)
- HDU1162 Eddy's picture 最小生成树
- hdu1162 Eddy's picture (prim最小生成树)
- hdu1162 Eddy's picture (最小生成树之prim 算法)
- HDU1162 Eddy's picture 【最小生成树Prim】
- hdu1162 Eddy's picture 并查集+最小生成树
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- hdu1162 Eddy's picture 最小生成树 prim
- hdu1162(并查集+Kruskal最小生成树)-- Eddy's picture
- Eddy's picture hdu1162
- Eddy's Picture(Hdu1162)
- HDU1162 Eddy's picture
- hdu1162-Eddy's picture
- hdu1162-Eddy's picture
- HDU1162:Eddy's picture
- HDU1162---Eddy's picture
- HDU1162-Eddy's picture
- Eddy's picture(最小生成树)
- windows 8.1系统JDK环境搭建和eclipse安装
- 经典c程序(0037) ---PCB布线BFS
- Java类集框架解析
- Named Pipes Provider, error: 40 - Could not open a connection to SQL Server
- test
- hdu1162 Eddy's picture(图论:最小生成树-minimal spanning tree)
- 从零开始教你制作cocos2dx-3.0 版本FlappyBird(可上架版本)(包括添加广告等)完整制作过程
- bzoj2241: [SDOI2011]打地鼠
- Java高效编程
- org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not ju
- jquery 如何判断一个元素当前状态是隐藏或显示
- jetty eclipse 整合二
- 65个源代码网站(转)
- Java数组与容器类分析资料–数组、List和Set、Map等