A - 秋实大哥与连锁快餐店

Time Limit: 9000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

成大事者,不惟有超世之才,亦有坚忍不拔之志。

秋实大哥开了一家快餐店之后,由于人赢光环的影响,很快就赚得了大量的资金。为了继续实现心中的远大的理想,他打算在全国各地开设分店赚大钱。假设现在有n家快餐店(其中有至少有一家是旗舰店)分布在二维平面上,第i家快餐店的坐标为(xi, yi)。为了方便交通,他打算在一些快餐店之间修建道路使得任意一家快餐店都能够通过道路到达某一家旗舰店。

但是秋实大哥忙于赚钱和过节,没有时间来设计道路,你能帮助秋实大哥算出最少一共需要修建多长的道路吗?

Input

第一行一个整数n,表示快餐店的个数。(n≤6666) 接下来n行,每行两个整数xi,yi,zi(−1000000≤xi,yi≤1000000)。表示第i家快餐店的位置(xi,yi),如果zi=0表示该店是普通的分店,如果 zi=1表示该店是旗舰店。

保证至少有一家旗舰店

Output

输出最少一共需要修建的道路长度,保留小数点后两位。

Sample input and output

Sample Input Sample Output
3
1 -1 0
1 1 0
0 0 1
2.83

解题思路:

我们注意到每个普通店都需要连接至少一个旗舰店,但是旗舰店之间并没有要求,那么我们可以认为所有旗舰店都已被连接,不过它们连接的代价是 0 罢了,这样,我们就成功的把这道题转换成了一道最小生成树题目.

最小生成树拥有Prim 和 Krusal 算法,但是本题显然是稠密图,因此我们采用Prim算法跑一遍即可.

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = + ;
/*
Prim Algorithm
0 -> 普通店
1 -> 旗舰店
*/ typedef struct Point
{
double x,y;
char type;
}; Point p[maxn];
double lowcost[maxn];
int n;
double ans = .; inline double distant(int u,int v)
{
return sqrt( (p[u].x - p[v].x)*(p[u].x - p[v].x) + (p[u].y - p[v].y)*(p[u].y - p[v].y) );
} void prim()
{
for(int i = ; i < n ; ++ i)
if (p[i].type) //旗舰店
{
lowcost[i] = -.;
for(int j = ; j < n ; ++ j)
{
double dis = distant(i,j);
lowcost[j] = min(lowcost[j] , dis);
}
}
for(int i = ; i < n ; ++ i)
{
double minval = 1e233;
int choosepoint = -;
for(int j = ; j < n ; ++ j)
{
if (lowcost[j] != - && lowcost[j] < minval)
{
minval = lowcost[j];
choosepoint = j;
}
}
if (choosepoint == -)
return;
ans += lowcost[choosepoint];
lowcost[choosepoint] = -;
for(int j = ; j < n ; ++ j)
{
double dis = distant(choosepoint,j);
lowcost[j] = min(lowcost[j],dis);
}
}
} int main(int argc,char *argv[])
{
scanf("%d",&n);
for(int i = ; i < n ; ++ i) lowcost[i] = 1e233;
for(int i = ; i < n ; ++ i)
scanf("%lf%lf%d",&p[i].x,&p[i].y,&p[i].type);
prim();
printf("%.2lf\n",ans);
return ;
}

UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>的更多相关文章

  1. UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>

    C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  2. UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>

    M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  3. UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>

    F - 秋实大哥与妹纸 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 1500/1500KB (Java/Others) Submit ...

  4. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...

  5. UESTC_秋实大哥带我飞 2015 UESTC Training for Graph Theory<Problem B>

    B - 秋实大哥带我飞 Time Limit: 300/100MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  6. UESTC_排名表 2015 UESTC Training for Graph Theory<Problem I>

    I - 排名表 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  7. UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>

    L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  8. UESTC_王之盛宴 2015 UESTC Training for Graph Theory<Problem K>

    K - 王之盛宴 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  9. UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>

    J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) S ...

随机推荐

  1. HTTP常见的状态码

    状态码的职责是当客户端向服务器端发送请求时,描述返回请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了什么错误.RFC2616定义的状态码,由3位数字和原因短信组成.数字中的第一位 ...

  2. c# list exists(contains) delegate 委托判断 元素是否在LIST中存在

    static void Main(string[] args)        {            List<GoodsInfo> list = new List<GoodsIn ...

  3. 关于Tcp三次握手的思考

    一.为什么不能使两次握手,两次握手就应该可以保证线路的畅通? 1) 只能建立一个方向的连接,称为半连接 记住TCP是全双工的. A向B发出请求,同时收到B的确认,这时只有A.B知道A到B的连接成功了. ...

  4. [TI DLP Buglist]data type error in illum_EnableIllumination function

    I am debuging my code today, I find when my code is running, it's stop at illum_EnableIllumination() ...

  5. JQuery 补充

    筛选: expr         String 字符串值,包含供匹配当前元素集合的选择器表达式. jQuery      objectobject 现有的jQuery对象,以匹配当前的元素. elem ...

  6. ZOJ Goldbach 2013年长沙赛区网络赛

    迟到了一天的AC.... 思路: 先把单个素数 或着 两个素数能组成的情况预处理一下,然后对于给出的 n,拿第三个素数去和两个素数的情况匹配,最后要注意去重. 详情见代码. 因为手残少敲了一个 els ...

  7. Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

    题目链接:点击打开链接 题意: 给定T表示case数 以下4行是一个case 每行2个点,u v 每次u能够绕着v逆时针转90° 问最少操作多少次使得4个u构成一个正方形. 思路: 枚举判可行 #in ...

  8. 【SQL学习笔记】排名开窗函数,聚合开窗函数(Over by)

    处理一些分组后,该组按照某列排序后 ,取其中某条完整数据的问题. 或 按照其中不同列分组后的聚合 比如 sum,avg之类. MSDN上语法: Ranking Window Functions < ...

  9. protobuf 参考资料

    Protocol Buffers 官网下载地址:https://developers.google.com/protocol-buffers/docs/downloads Protocol Buffe ...

  10. c++ 指针的简单用法

    对于指针,其实只需要明白几点就可以. 1.指针,是一个数值为地址的变量,这里尤其注意,指针变量的值是地址!就是例如40002这种像门牌号的地址值,其实就是内存中的一个编号. 2.&,该符号的意 ...