POJ - 2349 Arctic Network (最小生成树分块)
2014-07-20 10:19
429 查看
题目:http://poj.org/problem?id=2349
题意:
s个卫星频道,p个哨兵,频道之间的哨兵通话无距离限制,没有频道的哨兵通话距离为Di,自由分配卫星频道给相应哨兵,使得通话限制的最大距离Di最小
分析:
因为所有哨兵都要连通,且距离要求最小,所以先求出哨兵距离为权值的最小生成树
因为最小生成树中,每少一条边,则整体多一棵树,所以将最小生成树的边最大到小减去s-1个(用卫星频道通话),则剩下的最大距离为所求D
代码:
题意:
s个卫星频道,p个哨兵,频道之间的哨兵通话无距离限制,没有频道的哨兵通话距离为Di,自由分配卫星频道给相应哨兵,使得通话限制的最大距离Di最小
分析:
因为所有哨兵都要连通,且距离要求最小,所以先求出哨兵距离为权值的最小生成树
因为最小生成树中,每少一条边,则整体多一棵树,所以将最小生成树的边最大到小减去s-1个(用卫星频道通话),则剩下的最大距离为所求D
代码:
#include <stdio.h> #include <iostream> #include <string.h> #include <string> #include <math.h> #include <algorithm> #include <queue> #include <stack> #include <map> #include <vector> using namespace std; #define MAX 2020 #define MIN -1e+10 #define INF 0x7f7f7f7f int n, m, i, j; double lowcost[MAX]; double Edge[MAX][MAX]; void Prim() { int ans = 0; double a[MAX]; for(i = 1; i<=n; i++) { lowcost[i] = Edge[1][i]; } lowcost[1] = -1; for(i = 1; i<n; i++) { int v = -1, mint = INF; for(j = 1; j<=n; j++) { if(lowcost[j]!=-1 && lowcost[j] < mint) { v = j; mint = lowcost[j]; } } if(j != -1) { //ans += lowcost[v]; a[i] = lowcost[v]; lowcost[v] = -1; for(j = 1; j<=n; j++) { if(lowcost[j] !=-1 && lowcost[j] > Edge[v][j]) { lowcost[j] = Edge[v][j]; } } } else break; } sort(a + 1, a + i); for(j = 0; j<m-1; j++) i--; printf("%.2lf\n", a[i-1]); } double x[MAX], y[MAX]; int main() { freopen("a.txt", "r", stdin); int t; scanf("%d", &t); while(t--) { scanf("%d%d", &m, &n); for(i = 1; i<=n; i++) { scanf("%lf%lf", &x[i], &y[i]); } for(i = 1; i<n; i++) { for(j = i+1; j<=n; j++) { Edge[i][j] = Edge[j][i] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])); } } Prim(); } return 0; }
相关文章推荐
- poj 2349 Arctic Network(最小生成树的第k大边证明)
- POJ 2349 Arctic Network (最小生成树第K大(小)边)
- POJ 2349 Arctic Network 最小生成树题解
- POJ 2349 Arctic Network(最小生成树之Prim)
- poj-2349 Arctic Network 最小生成树
- Arctic Network (poj 2349 最小生成树)
- POJ 2349 Arctic Network(最小生成树,第k大边权,基础)
- POJ 2349 Arctic Network(最小生成树思想)
- poj 2349 Arctic Network(最小生成树变形)
- Prim最小生成树【poj 2349 Arctic Network;poj 1287 NetWorking】
- POJ 2349 Arctic Network(最小生成树 kruscal or prim)
- poj 2349 (最小生成树)Arctic Network
- POJ 2349 Arctic Network 最小生成树
- POJ 2349 Arctic Network [最小生成树]
- 2349 poj &&uva 10369 Arctic Network【最小生成树】
- poj 2349 Arctic Network(最小瓶颈生成树)
- poj 2349 Arctic Network 最小生成树,求第k大条边
- poj 2349 Arctic Network 最小生成树
- poj 2349 Arctic Network(图论:最小生成树)
- 【POJ】2349 - Arctic Network(最小生成树的第n条大边)(好题)