题目描述

Due to a lack of rain, Farmer John wants to build an irrigation system to

send water between his N fields (1 <= N <= 2000).

Each field i is described by a distinct point (xi, yi) in the 2D plane,

with 0 <= xi, yi <= 1000. The cost of building a water pipe between two

fields i and j is equal to the squared Euclidean distance between them:

(xi - xj)^2 + (yi - yj)^2

FJ would like to build a minimum-cost system of pipes so that all of his

fields are linked together -- so that water in any field can follow a

sequence of pipes to reach any other field.

Unfortunately, the contractor who is helping FJ install his irrigation

system refuses to install any pipe unless its cost (squared Euclidean

length) is at least C (1 <= C <= 1,000,000).

Please help FJ compute the minimum amount he will need pay to connect all

his fields with a network of pipes.

给定 n 个点,第 i 个点的坐标为 (xi,yi),如果想连通第 i 个点与第 j 个点,需要耗费的代价为两点的距离。第 i 个点与第 j 个点之间的距离使用欧几里得距离进行计算,即:

(xi−xj)2+(yi−yj)2

我们规定耗费代价小于 c 的两点无法连通,求使得每两点都能连通下的最小代价,如果无法连通输出 -1

输入格式

* Line 1: The integers N and C.

* Lines 2..1+N: Line i+1 contains the integers xi and yi.

第一行两个整数 n,c 代表点数与想要连通代价不能少于的一个数。
接下来 n 行每行两个整数 xi,yi 描述第 i 个点。

输出格式

* Line 1: The minimum cost of a network of pipes connecting the

fields, or -1 if no such network can be built.

一行一个整数代表使得每两点都能连通下的最小代价,如果无法连通输出 -1

输入输出样例

输入 #1

3 11
0 2
5 0
4 3

输出 #1

46

说明/提示

INPUT DETAILS:

There are 3 fields, at locations (0,2), (5,0), and (4,3). The contractor

will only install pipes of cost at least 11.

OUTPUT DETAILS:

FJ cannot build a pipe between the fields at (4,3) and (5,0), since its

cost would be only 10. He therefore builds a pipe between (0,2) and (5,0)

at cost 29, and a pipe between (0,2) and (4,3) at cost 17.

Source: USACO 2014 March Contest, Silver

数据规模与约定

说明

Translated by 一只书虫仔。

思路:

建图 跑 最小生成树

 AC代码如下:

#include <bits/stdc++.h>
#define buff                     \ios::sync_with_stdio(false); \cin.tie(0);                  \cout.tie(0)
using namespace std;
int n,c;
const int N = 2009;
double g[N][N];
bool st[N];
double dist[N];
struct point
{double x,y;
}s[N];
void add(int a, int b)
{double d = (s[a].x - s[b].x) * (s[a].x - s[b].x) + (s[a].y - s[b].y) * (s[a].y - s[b].y);if(d>=c)g[a][b] = d;elseg[a][b] = 0x3f3f3f3f;
}
void init()
{for(int i = 1;i<=n;i++)dist[i] = 0x3f3f3f3f;
}
int prim()
{init();double res = 0;for(int i = 0;i<n;i++){int t = -1;for(int j = 1;j<=n;j++){if(!st[j]&&(t==-1||dist[t]>dist[j]))t = j;}if(i&&dist[t]==0x3f3f3f3f)return -1;if(i)res += dist[t];st[t] = 1;for(int j = 1;j<=n;j++)dist[j] = min(dist[j],g[t][j]);}return res;
}
int main()
{buff;cin>>n>>c;for(int i = 1;i<=n;i++){cin>>s[i].x>>s[i].y;}for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++){if(i!=j)add(i,j);}int ans = prim();cout<<ans<<endl;
}

P2212 [USACO14MAR]Watering the Fields S(最小生成树)相关推荐

  1. P2212 [USACO14MAR]Watering the Fields S(Prim)

    [USACO14MAR]Watering the Fields S - 洛谷https://www.luogu.com.cn/problem/P2212 #include <iostream&g ...

  2. BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )

    MST...一开始没注意-1结果就WA了... ---------------------------------------------------------------------------- ...

  3. 0x62.图论 - 最小生成树

    目录 一.KruskalKruskalKruskal算法 1.P3366 [模板]最小生成树 二.PrimPrimPrim算法 2.P2212 [USACO14MAR]Watering the Fie ...

  4. Minimum/Maximum Spanning Tree/Forest

    MST问题.对于一个有权无向图,使其原有连通块保持连通性并形成树,同时边权之和最小.换一种说法,最小生成树或者最小生成森林. 两个算法一个推论. Kruskal's Algorithm 基于贪心.将边 ...

  5. 语法入门*算法入门题单

    作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...

  6. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  7. 【kuangbin带你飞】专题六 最小生成树

    [kuangbin带你飞]专题六 最小生成树 A.POJ - 1251 Jungle Roads (最小生成树模板) The Head Elder of the tropical island of ...

  8. hdu 1301 Jungle Roads 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...

  9. 【HDU - 1301】Jungle Roads(并查集+最小生成树)(内附最小生成树两种算法 克鲁斯特尔算法amp;amp;普里姆算法)

    题干: Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

最新文章

  1. Android Edittext digits 属性限制输入的内容
  2. Apache网页优化之网页压缩
  3. 热传的职场异性相处PPT!网友评:你倒是给我分配个女同事啊!
  4. Python的__getattribute__ vs __getattr__的妙用
  5. 行政区村界线_工作动态 | 龟山镇召开村级行政区域界线勘定工作暨民政业务培训会议...
  6. 循环神经网络RNN的基本组件(五)
  7. 番石榴条纹类的细粒度并发
  8. inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题
  9. python编写自制编译器_编译器构造-编译Python
  10. 【OpenCV】OpenCV函数精讲之 -- 访问图像中的像素--计时函数
  11. Haproxy+Keepalived+Nginx
  12. 动态规划: 投资分配问题
  13. MATLAB——imhist函数
  14. 关于Sentaurus的日常(二)(Carrier Transport Models)
  15. 薅羊毛!如何让趣头条自动阅读挣钱
  16. nginx小技巧-动态域名(微信,小程序80端口)
  17. UE4 UV缩放 旋转和偏移
  18. 《技术人创业攻略》-用技术改变世界!
  19. Windows和Xyplorer的完美结合
  20. 旅行青蛙分析(Android篇)

热门文章

  1. js简单动画:匀速动画、缓动动画、多物体动画以及透明度动画
  2. 【熊猫多模式站群开发日志】权限控制拦截器
  3. 微信小程序入门四:实现table效果
  4. nginx 1.16 配置反向代理,http,https,ssl
  5. js 通用 保留两位小数 金额千分位格式化
  6. js解码编码decodeURI与decodeURIComponent区别
  7. 人脸识别技术原理与工程实践
  8. alexa技能个数_如何改善Alexa技能的对话流程
  9. html5 学习_5分钟内学习HTML
  10. freeswitch 安装 fail2ban 动态拦截IP攻击