Watering the Fields

时间限制: 1 Sec  内存限制: 64 MB
提交: 26  解决: 10
[提交][状态][讨论版]

题目描述

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.

输入

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

输出

* Line 1: The minimum cost of a network of pipes connecting the fields, or -1 if no such network can be built.

样例输入

3 11
0 2
5 0
4 3

样例输出

46

提示

There are 3 fields, at locations (0,2), (5,0), and (4,3).  The contractor will only install pipes of cost at least 11.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.

【分析】最小生成树(裸)。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof a)
#define pb push_back
typedef long long ll;
using namespace std;
const int N = 4e3;
const int M = ;
int n,m,k,edg[N][N],lowcost[N],pre[N];
void Prim() {
for(int i=;i<=n;i++){
lowcost[i]=edg[][i];
}
lowcost[]=-;
int sum=;
for(int i=;i<n;i++){
int minn=;
for(int j=;j<=n;j++){
if(lowcost[j]!=-&&lowcost[j]<minn){
minn=lowcost[j];
k=j;
}
}
if(minn>=){
puts("-1");
return;
}
sum+=minn;
lowcost[k]=-;
for(int j=;j<=n;j++){
if(edg[j][k]<lowcost[j]){
lowcost[j]=edg[j][k];
}
}
}
printf("%d\n",sum);
}
int main()
{
for(int i=;i<N;i++)for(int j=;j<N;j++)edg[i][j]=;
int u,v,x[N],y[N];
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
}
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
int s=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
if(s>=m)edg[i][j]=edg[j][i]=s;
}
}
Prim();
return ;
}

(寒假集训)Watering the Fields (最小生成树)的更多相关文章

  1. P2212 [USACO14MAR]浇地Watering the Fields

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  2. 洛谷 P2212 [USACO14MAR]浇地Watering the Fields 题解

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  3. BZOJ3479: [Usaco2014 Mar]Watering the Fields

    3479: [Usaco2014 Mar]Watering the Fields Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 81  Solved: ...

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

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

  5. bzoj 3479: [Usaco2014 Mar]Watering the Fields

    3479: [Usaco2014 Mar]Watering the Fields Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 174  Solved ...

  6. CSU-ACM寒假集训选拔-入门题

    CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...

  7. 洛谷——P2212 [USACO14MAR]浇地Watering the Fields

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  8. BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)

    这个= =最近刷的都是水题啊QAQ 排除掉不可能的边然后就最小生成树就行了= = CODE: #include<cstdio>#include<iostream>#includ ...

  9. 【2018寒假集训Day 8】【最小生成树】Prim和Kruskal算法模板

    Luogu最小生成树模板题 Prim 原理与dijkstra几乎相同,每次找最优的点,用这个点去松弛未连接的点,也就是用这个点去与未连接的点连接. #include<cstdio> #in ...

随机推荐

  1. Lua3

    Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础.如数组.记录.线性表.队列和集合等,在Lua中都可以通过table来表示. 1.数组 使用整数来索引table即可在Lua中实 ...

  2. Wordpress 后台文章编辑区添加模板选择功能

    功能:后台编辑文章时,可以选择文章使用的模板,效果如下图: 操作步骤: <?php /** * Template Name: kbsingle full * Add by Ryan 3/18/2 ...

  3. Gluon

    推荐一门mxnet的学习框架gluon 首先是学习网址链接gluon 基本环节分成两部分 从0开始(介绍不使用框架,而只使用mxnet来完成神经网络的搭建) gluon实现(介绍使用框架快速搭建神经网 ...

  4. Python中关于split和splitext的差别和运用

    在使用Python的过程中,在处理字符串的时候会遇到split()和os.path.split()两个函数,他们的主要区别可以概括为一个从前往后搜索字符串,后者则是从后往前搜索 '.'(reverse ...

  5. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

  6. [转]Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    本文转自:http://www.blogjava.net/yongboy/archive/2013/12/12/407498.html 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 ...

  7. HashMap 的深入学习

    Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap.Hashtable.LinkedHashMap和TreeMap,类继承关系如下图 ...

  8. LINQ to Entities 不识别方法“System.Guid Parse(System.String)”,因此该方法无法转换为存储表达式。

    LINQ to Entities 不识别方法"System.Guid Parse(System.String)",因此该方法无法转换为存储表达式. linq 中不能转换类型

  9. [CF954G]Castle Defense

    题目大意:有$n$个点,每个点最开始有$a_i$个弓箭手,在第$i$个位置的弓箭手可以给$[i-r,i+r]$区间加上$1$的防御,你还有$k$个弓箭手,要求你最大化最小防御值 题解:二分答案,从右向 ...

  10. 《c程序设计语言》读书笔记-删除字符串中匹配的字符

    #include <stdio.h> #include <string.h> #define Num 10 int main() { int c,i,j = 0,m,n = 0 ...