码迷,mamicode.com
首页 > 其他好文 > 详细

[luogu2847]奶牛广播-金

时间:2018-09-05 21:39:49      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:++   register   stdin   lin   sqrt   inpu   color   next   lse   

 

题目在这里~

题目描述

FJ的N头牛(1≤N≤1000)为了在他们之间传播信息, 想要组织一个"哞哞广播"系统. 奶牛们决定去用步话机装备自己而不是在很远的距离之外互相哞哞叫, 所以每一头奶牛都必须有一个步话机. 这些步话机都有一个限制传播半径, 但是奶牛们可以间接地通过中间奶牛传播信息, 所以并不是每头牛都必须直接向其他每一头奶牛连边.

奶牛们需要去决定多少钱花在步话机上, 如果他们花了X, 那么他们都将会得到sqrt(x)距离的步话机. 所以, 两头牛之间的欧几里得距离最多是X. 请帮助奶牛们找到最小的X使得图是强连通的.、

输入输出格式

输入格式:

 

The first line of input contains NN.

The next NN lines each contain the xx and yy coordinates of a single cow. These are both integers in the range 0 \ldots 25,000025,000.

 

输出格式:

 

Write a single line of output containing the integer XX giving the minimum amount the cows must spend on walkie-talkies.

 

输入输出样例

输入样例#1: 复制
4
1 3
5 4
7 2
6 1
输出样例#1: 复制
17

 

题目大意:给你N个点,让你求出连接它们的最短路中的最长路。

思路:二分或最小生成树模板。这里放最小生成树的代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int f[1050],n;
 4 struct node{
 5     int u,v;
 6     double w;
 7 }edge[10500000];
 8 int x[1050],y[1050],tot=0;
 9 double ans;
10 inline double dis(int x1,int y1,int x2,int y2)
11 {
12     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
13 }
14 inline int find(int x)
15 {
16     if(x==f[x])return x;
17     else return f[x]=find(f[x]);
18 }
19 inline bool cmp(node a,node b)
20 {
21     return a.w<b.w;
22 }
23 inline void make()
24 {
25     for(register int i=1;i<=n;++i)f[i]=i;
26 }
27 inline void kruskal()
28 {
29     make();
30     for(register int i=1;i<=n;++i)
31       for(register int j=1;j<=n;++j)      
32           if(i!=j)
33           {
34               edge[++tot].u=i;
35               edge[tot].v=j;
36               edge[tot].w=dis(x[i],y[i],x[j],y[j]);
37         }
38     sort(edge+1,edge+tot+1,cmp);
39     int k=0;
40     for(register int i=1;i<=tot;++i){
41         int r1=find(edge[i].u),r2=find(edge[i].v);
42         if(r1!=r2){
43             f[r1]=r2;
44             ++k;
45             ans=edge[i].w;
46         }
47         if(k==n-1)break;
48     }     
49 }
50 int main()
51 {
52     //freopen("1.txt","r",stdin);
53     ios::sync_with_stdio(0);
54     cin>>n;
55     for(register int i=1;i<=n;++i)
56     cin>>x[i]>>y[i];
57     kruskal();
58     printf("%.0lf",ans*ans);
59 }

 

[luogu2847]奶牛广播-金

标签:++   register   stdin   lin   sqrt   inpu   color   next   lse   

原文地址:https://www.cnblogs.com/guoyangfan/p/9594054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!