JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
来源:互联网 发布:狗钙片哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/05 18:59
Description
为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里每座建筑都连上互联网,方便未来随时随地网购农药。
他的农庄很大,有N 座建筑,但地理位置偏僻,网络信号很差。
一座建筑有网,当且仅当满足以下至少一个条件:
1、给中国移动交宽带费,直接连网,花费为A。
2、向另外一座有网的建筑,安装共享网线,花费为B×两者曼哈顿距离。
现在,农夫约已经统计出了所有建筑的坐标。他想知道最少要多少费用才能达到目的。
Input
第一行:三个正整数,代表N、A、B。
接下来N 行:每行两个整数Xi、Yi,第i 行代表第i 座建筑的坐标。
Output
第一行:一个整数,代表答案。
Sample Input
5 10 2
0 0
0 1
1 0
1 1
100 100
Sample Output
26
Data Constraint
30%的数据:N <= 3,A <= 50,B <= 5
60%的数据:N <= 100,A <= 1000,B <= 20
100%的数据:N <= 10^3,A <= 10^4,B <= 50,|Xi|,|Yi| < 2^15
Solution
这题是一道简单的最小生成树裸题。
一个点
i 向另一个点j 连一条权值为dist(i,j)∗B 的边,其中dist(i,j) 表示两点的曼哈顿距离。如何处理“直接联网”的情况呢?于是再加入一个虚点
0 。点
0 向每一个点各连一条权值为A 的边,做最小生成树时将0 也做进去即可。显然,这
n+1 个点(包括0 )构成的最小生成树即为答案。
Code
#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const int N=1001;struct data{ LL x,y,z;}a[N],b[2*N*N];int tot;LL ans;int f[N];inline LL read(){ LL X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}inline LL dist(int i,int j){ return abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y);}inline bool cmp(data x,data y){ return x.z<y.z;}inline int get(int x){ if(f[x]==x) return x; return f[x]=get(f[x]);}int main(){ int n=read(); long long A=read(),B=read(); for(int i=1;i<=n;i++) { a[i].x=read(),a[i].y=read(),f[i]=i; for(int j=1;j<i;j++) { b[++tot].x=j; b[tot].y=i; b[tot].z=dist(i,j)*B; } } for(int i=1;i<=n;i++) { b[++tot].x=0; b[tot].y=i; b[tot].z=A; } sort(b+1,b+1+tot,cmp); for(int i=1,k=0;i<=tot;i++) { int f1=get(b[i].x),f2=get(b[i].y); if(f1!=f2) { f[f1]=f2; ans+=b[i].z; if(++k==n) break; } } printf("%lld",ans); return 0;}
阅读全文
1 0
- JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
- JZOJ 5354. 【NOIP2017提高A组模拟9.9】导弹拦截
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- JZOJ 5195. 【NOIP2017提高组模拟7.3】A
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- jzoj. 100031. 【NOIP2017提高A组模拟7.9】外星密码
- JZOJ 100035【NOIP2017提高A组模拟7.10】区间
- JZOJ 100036 【NOIP2017提高A组模拟7.10】随机
- JZOJ 100037【NOIP2017提高A组模拟7.11】后缀数组
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度
- JZOJ 100045. 【NOIP2017提高A组模拟7.13】好数
- JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
- JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异
- 【JZOJ 5249】【NOIP2017提高A组模拟8.10】文本编辑器
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C
- HDU1087 跳棋
- Dialog
- C++产生正态分布
- 猜数字游戏
- python语言特性
- JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
- 就是要你懂 TCP-- 最经典的TCP性能问题
- Java基础10:Vecotor向量类
- 从零开始学习Gradle之三---多项目构建
- 初始Zookeeper
- Editing a Book UVA
- 虚拟机作用
- SSDB安装
- 20170909深度学习solar测试日志