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

NOIP模拟赛 无线通讯网

时间:2016-11-04 21:04:35      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:wireless   char   题解   node   har   无线   log   输出   nod   

【题目描述】

     国防部计划用无线网络连接若干个边防哨所。2种不同的通讯技术用来搭建无线网络;每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。

任意两个配备了一条卫星电话线路的哨所(两边都拥有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过D,这是受收发器的功率限制。收发器的功率越高,通话距离D会更远,但同时价格也会更贵。

收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个D。

你的任务是确定收发器必须的最小通话距离D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。

【输入格式】 wireless.in

第1行:2个整数S(1<=S<=100)和P(S<P<=500),S表示可安装的卫星电话的哨所数,P表示边防哨所的数量。

     接下里P行,每行描述一个哨所的平面坐标(x,y),以km为单位,整数,0<=x,y<=10000。

【输出格式】 wireless.out

第1行:1个实数D,表示无线电收发器的最小传输距离。精确到小数点后两位。

【样例输入】

 2 4

 0 100

 0 300

 0 600

 150 750

【样例输出】

212.13

 

数据范围

对于20%的数据  P=2,S=1

对于另外20%的数据  P=4,S=2

对于100%的数据  1<=S<=100,S<P<=500 

 

kruskal最小生成树

题解:

用vector容器储存最大值

有几个卫星电话,就取倒数第几个最大值

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 struct Edge
 9 {
10     int u,v;
11     double w;
12 }E[300000];
13 int F[501];
14 
15 vector<double> ans;
16 
17 int s,p,node=0,x[501],y[501];
18 
19 int read()
20 {
21     int x=0,f=1;char ch=getchar();
22     while(ch<0||ch>9){if(ch==-)f=-f;ch=getchar();}
23     while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
24     return x*f;
25 }
26 
27 bool cmp(Edge A,Edge B)
28 {
29     return A.w<B.w;
30 }
31 
32 int find(int a)
33 {
34     while(F[a]!=0) a=F[a];
35     return a;
36 }
37 
38 int main()
39 {
40     s=read();p=read();
41     for(int i=1;i<=p;i++)
42     {
43         x[i]=read();y[i]=read();
44     }
45     for(int i=1;i<=p;i++)
46         for(int j=i+1;j<=p;j++)
47         {
48             E[node++]=(Edge){i,j,sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))};
49         }
50     sort(E,E+node,cmp);
51     int num=p;
52     for(int i=0;i<node&&num>0;i++)
53     {
54         int u=find(E[i].u);
55         int v=find(E[i].v);
56         if(u!=v)
57         {
58             F[u]=v;
59             num--;
60             ans.push_back(E[i].w);
61         }
62     }
63     sort(ans.begin(),ans.end());
64     printf("%.2lf",ans[p-s-1]);
65     return 0;
66 }

 

NOIP模拟赛 无线通讯网

标签:wireless   char   题解   node   har   无线   log   输出   nod   

原文地址:http://www.cnblogs.com/InWILL/p/6031348.html

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