poj 2349 Arctic Network(图论:最小生成树)
2014-07-22 16:41
330 查看
题意:有两种不同的通信技术,有卫星通信的两个城市之间可以任意联络,但用无线电通信的城市只能和距离不超过D的城市联系。无线电的能力越高(即传输距离D越大),花费就越大。已知无线电的数目m,让求最小的D。
一道读起来很蛋疼的题,我到现在也没读懂...
不明白样例为什么对应的是212.13
样例对应生成树的三条边应该为:200, 212.13, 300
反正这个题目考查的是prim,找到SPT上的所有边,排序再输出特定边就可以了
代码如下:
一道读起来很蛋疼的题,我到现在也没读懂...
不明白样例为什么对应的是212.13
样例对应生成树的三条边应该为:200, 212.13, 300
反正这个题目考查的是prim,找到SPT上的所有边,排序再输出特定边就可以了
代码如下:
#include <cmath> #include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define LL long long #define INF 0x7fffffff using namespace std; double dis[MAXN], g[MAXN][MAXN], edge[MAXN]; int n, m; struct Point { int x, y; }a[MAXN]; double get_dis(int i, int j) { return sqrt(pow(1.0*(a[i].x-a[j].x), 2.0) + pow(1.0*(a[i].y-a[j].y), 2.0)); } bool cmp(double i, double j) { return i>j; } double prim() { int now, minnode, i, j, cnt; double minedge, ans; for(i=0; i<m; ++i) dis[i] = INF; now = 0; ans = 0.0;//ans可以不要 cnt = 0; for(i=0; i<m-1; ++i) { dis[now] = -1; minedge = INF; for(j=0; j<m; ++j) { if(now!=j && dis[j]>=0) { dis[j] = min(dis[j], g[now][j]); if(dis[j] < minedge) { minedge = dis[j]; minnode = j; } } } edge[cnt++] = minedge;//最小生成树的边集 ans += minedge; now = minnode; } sort(edge, edge+cnt, cmp);//从大到小排序 /* for(i=0; i<cnt; ++i) printf("edge[%d] = %.2f\n", i, edge[i]); */ return edge[n-1]; } int main(void) { int T, i, j; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); for(i=0; i<m; ++i) scanf("%d%d", &a[i].x, &a[i].y); for(i=0; i<m; ++i) { for(j=i+1; j<m; ++j) { g[i][j] = g[j][i] = get_dis(i, j); } } cout.setf(ios::fixed);//限定cout输出精度 cout.precision(2); cout << prim() << endl; } return 0; }
相关文章推荐
- POJ 2349 Arctic Network(最小生成树)
- POJ 2349 Arctic Network (最小生成树)
- Arctic Network (poj 2349 最小生成树)
- POJ 2349 Arctic Network(最小生成树思想)
- POJ-2349 Arctic Network 最小生成树
- POJ 题目2349 Arctic Network(最小生成树,第k长边)
- POJ 2349 Arctic Network(最小生成树--prime)
- POJ 2349 Arctic Network(最小生成树,第k大边权,基础)
- POJ 2349 Arctic Network(最小生成树之Prim)
- POJ 2349 Arctic Network 最小生成树题解
- Prim最小生成树【poj 2349 Arctic Network;poj 1287 NetWorking】
- POJ 2349 Arctic Network (最小生成树第K大(小)边)
- poj 2349 Arctic Network(最小生成树的第k大边证明)
- 【POJ】2349 - Arctic Network(最小生成树的第n条大边)(好题)
- POJ 2349 Arctic Network [最小生成树]
- POJ_2349_Arctic Network(最小生成树)
- poj 2349 (最小生成树)Arctic Network
- POJ 2349 Arctic Network(最小生成树 kruscal or prim)
- zoj 1914 || poj 2349 Arctic Network【最小生成树 kruskal && prim】
- 2349 poj &&uva 10369 Arctic Network【最小生成树】