UVALive 3270 Simplified GSM Network 二分+Floyd

题目链接:https://vjudge.net/contest/202436#problem/B

题意:已知B(1≤B≤50)个信号站和C(1≤C≤50)座城市的坐标,坐标的绝对值不大于1000,每个城市使用最近的信号站。给定R(1≤R≤250)条连接城市线路的描述和Q(1≤Q≤10)个查询,求相应两城市间通信时最少需要转换信号站的次数。

解法:


#include <bits/stdc++.h>
using namespace std;
struct node{
    int x,y;
};
const int MaxB = 50;
const int MaxC = 50;
const int MaxS = 50*50;
int B, C, R, Q;
node BTS[MaxB], city[MaxC];
int S[MaxC][MaxC];
double dis(double x1, double y1, double x2, double y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int area(double x, double y){
    int i,k;
    double minn,tmp;
    minn = dis(x,y,BTS[0].x,BTS[0].y);
    k=0;
    for(int i=1;i<B;i++){
        tmp = dis(x,y,BTS[i].x,BTS[i].y);
        if(tmp<minn){
            minn = tmp;
            k = i;
        }
    }
    return k;
}
int get_switch(double x1, double y1, double x2, double y2){
    if(area(x1,y1)==area(x2,y2)) return 0;
    if(dis(x1,y1,x2,y2)<1e-6) return 1;
    return get_switch(x1,y1,(x1+x2)/2,(y1+y2)/2)+get_switch((x1+x2)/2,(y1+y2)/2, x2,y2);
}

int main(){
    int ks = 0;
    while(~scanf("%d%d%d%d",&B,&C,&R,&Q)){
        if(B==0&&C==0&&R==0&&Q==0) break;
        for(int i=0; i<B; i++) scanf("%d%d", &BTS[i].x,&BTS[i].y);
        for(int i=0; i<C; i++) scanf("%d%d", &city[i].x,&city[i].y);
        memset(S, 0, sizeof(S));
        for(int i=0; i<R; i++){
            int x, y;
            scanf("%d %d", &x,&y);
            x--;
            y--;
            S[x][y]=S[y][x]=1;
        }
        for(int i=0; i<C; i++){
            for(int j=i+1; j<C; j++){
                if(S[i][j]==0) S[i][j]=MaxS;
                else S[i][j] = get_switch(city[i].x,city[i].y,city[j].x,city[j].y);
                S[j][i]=S[i][j];
            }
        }
        for(int i=0;i<C;i++) S[i][i]=0;
        for(int k=0; k<C; k++)
            for(int i=0; i<C; i++)
                for(int j=0; j<C; j++)
                    if(S[i][j]>S[i][k]+S[k][j])
                        S[i][j] = S[i][k]+S[k][j];
        printf("Case %d:\n", ++ks);
        for(int i=0; i<Q; i++){
            int x, y;
            scanf("%d %d", &x,&y);
            x--;
            y--;
            if(S[x][y]>=MaxS) puts("Impossible");
            else printf("%d\n", S[x][y]);
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物理层简化规范是指在计算机网络中,用于描述数据传输的物理层参数和特性的一种规范。物理层是计算机网络中最底层的一层,负责控制数据在网络中的传输和接收。 物理层简化规范通常包括以下几个方面的内容: 1. 传输介质:描述了网络使用的传输介质的类型,例如铜线、光纤或空气等。这些传输介质的不同特性会对数据的传输速率、距离和可靠性产生影响。 2. 接口类型:描述了物理层与其他网络设备(如网卡、集线器或交换机)之间的接口类型。常见的接口类型包括以太网、无线局域网(Wi-Fi)等。 3. 电气特性:描述了在传输介质上传输数据时所使用的电气信号的特性,如电压、频率等。这些电气特性对数据的传输速率、噪音干扰和传输距离等都有影响。 4. 编码和调制方式:描述了将数字数据转换为模拟信号以在传输介质上传输的编码和调制方式。常见的编码和调制方式包括曼彻斯特编码、振幅调制等。 5. 时钟同步:描述了在数据传输过程中保持发送端和接收端的时钟同步的方式。时钟同步对于正确识别和解析传输的数据至关重要。 物理层简化规范的目的是为了确保在计算机网络中数据的可靠传输和接收。它提供了一种标准化的方式来描述物理层的参数和特性,使得不同设备和系统之间能够互相兼容和交互。通过遵循这些规范,网络设备可以更好地理解和解析物理层传输的数据,从而实现高效和可靠的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值