POJ2420——三分——A Star not a Tree?

Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allow you to connect any number of computers together in a linear arrangement. Luke is particulary proud that he solved a nasty NP-complete problem in order to minimize the total cable length. 
Unfortunately, Luke cannot use his existing cabling. The 100mbs system uses 100baseT (twisted pair) cables. Each 100baseT cable connects only two devices: either two network cards or a network card and a hub. (A hub is an electronic device that interconnects several cables.) Luke has a choice: He can buy 2N-2 network cards and connect his N computers together by inserting one or more cards into each computer and connecting them all together. Or he can buy N network cards and a hub and connect each of his N computers to the hub. The first approach would require that Luke configure his operating system to forward network traffic. However, with the installation of Winux 2007.2, Luke discovered that network forwarding no longer worked. He couldn‘t figure out how to re-enable forwarding, and he had never heard of Prim or Kruskal, so he settled on the second approach: N network cards and a hub.

Luke lives in a loft and so is prepared to run the cables and place the hub anywhere. But he won‘t move his computers. He wants to minimize the total length of cable he must buy.

Input

The first line of input contains a positive integer N <= 100, the number of computers. N lines follow; each gives the (x,y) coordinates (in mm.) of a computer within the room. All coordinates are integers between 0 and 10,000.

Output

Output consists of one number, the total length of the cable segments, rounded to the nearest mm.

Sample Input

4
0 0
0 10000
10000 10000
10000 0

Sample Output

28284
/*
三分里面的三分

*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

struct edge{
    double x, y;
}a[110];
const double inf = 1e9 + 100;
double dis, diss;
int n;

double checky(double x, double y)
{
    double dis = 0;
     for(int i = 1; i <= n; i++){
     dis += sqrt((x - a[i].x)*(x - a[i].x) + (y - a[i].y)*(y - a[i].y));
     }
     return dis;
}

double checkx(double x)
{
    double ly = -inf, ry = inf;
    for(int i = 1; i <= 100; i++){
        double midy = (ly + ry)/2;
        double midmidy = (ry + midy)/2;
        if(checky(x, midy) > checky(x, midmidy))
            ly = midy;
        else ry = midmidy;
        diss = min(checky(x, midy), checky(x , midmidy));
    }
    return diss;
}

int main()
{
    while(~scanf("%d", &n)){
        diss = inf;
        for(int i = 1; i <= n ; i++)
            scanf("%lf%lf", &a[i].x, &a[i].y);
        double lx = -inf, rx = inf;
        for(int i = 1; i <= 100; i++){
            double midx = (lx + rx)/2;
            double midmidx = (rx + midx)/2;
            if(checkx(midx) > checkx(midmidx))
                lx = midx;
            else rx = midmidx;
            }
        //printf("%f %f\n", lx, rx);
        printf("%.0f\n", diss);
    }
    return 0;
}

  

时间: 2024-11-13 09:16:59

POJ2420——三分——A Star not a Tree?的相关文章

【POJ2420】A star not a tree?

蒟蒻开始学模拟退火-- 起初一直不肯学,因为毕竟玄学算法-- 哎呀玄学怎么就没用呢?对不对? #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cstdlib> #include<cmath> #include<ctime> using namespace std; int n; double xx,yy,a

三分 POJ 2420 A Star not a Tree?

题目传送门 1 /* 2 题意:求费马点 3 三分:对x轴和y轴求极值,使到每个点的距离和最小 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 10 const int MAXN = 1e2 + 10; 11 const int INF = 0x3f3f3f3f; 12 double x[MAXN], y[MAXN]; 13 i

poj-2420 A Star not a Tree?(模拟退火算法)

题目链接: A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5219   Accepted: 2491 Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allo

POJ 2420 A Star not a Tree? (计算几何-费马点)

A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3435   Accepted: 1724 Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allow you

[POJ 2420] A Star not a Tree?

A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4058   Accepted: 2005 Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allow you

UVA 10228 - Star not a Tree?(模拟退火)

UVA 10228 - Star not a Tree? 题目链接 题意:给定一些点,费马点(到这些点距离和最短),输出距离和 思路:模拟退火去搞,初始温度1W步,降温系数设为0.83,然后每次找周围4个方向,做10次保证答案准确 代码: #include <cstdio> #include <cstring> #include <cmath> #include <ctime> #include <cstdlib> #include <al

【POJ 2420】A Star not a Tree?

A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3929   Accepted: 1952 Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allow you

A Star not a Tree?

题目链接 题意: 给n个点,求费马点到各点的距离和 分析: 费马点直接求即可,用模拟退火即可 这个方法其实就是默认费马点只有一个,那么就直接求局部最优解即可,不用再以一定概率去接受较差的状态 const double eps = 1e-5; const int MAXN = 110000; struct Point { double x, y; Point(double x=0, double y=0):x(x),y(y) { } }; int n; Point ipt[MAXN]; doubl

POJ 2420 A Star not a Tree? 爬山算法

B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88808#problem/B Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10ba