P1991 无线通讯网

Posted zytwan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1991 无线通讯网相关的知识,希望对你有一定的参考价值。

收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个 D。你的任务是确定收发器必须的最小通话距离 D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。

最小瓶颈路好吧

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxm=500000;
 7 struct edge{
 8     int u,v;
 9     double w;
10 }e[maxm];
11 int fa[maxm],cnt;
12 double dis[maxm];
13 void add(int u,int v,double w)
14 {
15     e[++cnt].u=u;
16     e[cnt].v=v;
17     e[cnt].w=w;
18 }
19 int cmp(edge p,edge q)
20 {
21     return p.w<q.w;
22 }
23 int find(int x)
24 {
25     if(x!=fa[x]) fa[x]=find(fa[x]);
26     return fa[x];
27 }
28 int a[maxm],b[maxm];
29 double c[maxm];
30 int main()
31 {
32     int n,m,num=0;
33     scanf("%d%d",&n,&m);
34     for(int i=1,x,y;i<=m;++i)
35     {
36         scanf("%d%d",&a[i],&b[i]);
37     }
38     for(int i=1;i<=m;++i) fa[i]=i;
39     for(int i=1;i<=m;++i)
40     {
41         for(int j=1;j<=m;++j)
42         {
43             if(i!=j)
44             {
45                 double s=(double)sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
46                 add(i,j,s);
47             }
48         }
49     }
50     sort(e+1,e+cnt+1,cmp);
51     for(int i=1;i<=cnt;++i)
52     {
53         int r1=find(e[i].u),r2=find(e[i].v);
54         if(r1!=r2)
55         {
56             fa[r1]=r2;
57             c[++num]=e[i].w;
58         }
59     }
60     sort(c+1,c+num+1);
61     printf("%.2lf",c[num-n+1]);
62     return 0;
63 }

 

以上是关于P1991 无线通讯网的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1991 无线通讯网

Luogu P1991 无线通讯网

P1991 无线通讯网

P1991 无线通讯网[最小生成树]

P1991 无线通讯网

最小生成树+并查集(洛谷P1991 无线通讯网)