zoukankan      html  css  js  c++  java
  • 1366 贫富差距(floyed)

    题目来源: TopCoder
    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
    一个国家有N个公民,标记为0,1,2,...,N-1,每个公民有一个存款额。已知每个公民有一些朋友,同时国家有一条规定朋友间的存款额之差不能大于d。也就是说,a和b是朋友的话,a有x元的存款,b有y元,那么|x-y|<=d。给定d值与N个人的朋友关系,求这个国家最富有的人和最贫穷的人的存款相差最大的可能值是多少?即求贫富差距的最大值的下界。若这个值为无穷大,输出-1.
    Input
    多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
    每组测试数据有相同的结构构成。
    每组数据的第一行两个整数N,d,表示人数与朋友间存款差的最大值,其中2<=N<=50,0<=d<=1000.
    接下来有一个N*N的数组A,若A[i][j]='Y'表示i与j两个人是朋友,否则A[i][j]='N'表示不是朋友。其中A[i][i]='N',且保证
    A[i][j]=A[j][i].
    Output
    每组数据一行输出,即这个国家的贫富差距最大值的下界,如果这个值为无穷大输出-1.
    Input示例
    3
    3 10
    NYN
    YNY
    NYN
    2 1
    NN
    NN
    6 1000
    NNYNNN
    NNYNNN
    YYNYNN
    NNYNYY
    NNNYNN
    NNNYNN
    Output示例
    20
    -1
    3000


    //容易想到,看做一个01图的话,有两个及以上连通块就是 -1,然后求出连通块内最远距离即可
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define INF 0x3f3f3f3f
     4 #define LL long long
     5 #define MOD 1000000007
     6 #define MX 55
     7 
     8 int n, d;
     9 char str[MX];
    10 int G[MX][MX];
    11 
    12 int main()
    13 {
    14     int T;
    15     scanf("%d",&T);
    16     while (T--)
    17     {
    18         scanf("%d%d",&n,&d);
    19         memset(G,0x3f,sizeof(G));
    20         for (int i=1;i<=n;i++)
    21         {
    22             scanf("%s",str+1);
    23             for (int j=1;j<=n;j++)
    24             {
    25                 if (str[j]=='Y')
    26                     G[i][j] = 1;
    27                 else
    28                     G[i][j] = INF;
    29             }
    30         }
    31         for (int k=1;k<=n;k++)
    32             for (int i=1;i<=n;i++)
    33                 for (int j=1;j<=n;j++)
    34                     G[i][j] = min(G[i][j],G[i][k]+G[k][j]);
    35         int mmm=0, ok=1;
    36         for (int i=1;i<=n;i++)
    37         {
    38             for (int j=i+1;j<=n;j++)
    39             {
    40                 if (G[i][j]==INF)
    41                     ok=0;
    42                 mmm = max(mmm,G[i][j]);
    43             }
    44         }
    45         if (ok)
    46             printf("%d
    ",mmm*d);
    47         else
    48             printf("-1
    ");
    49 
    50     }
    51     return 0;
    52 }
    View Code


  • 相关阅读:
    Eclipse编辑properties文件中文乱码
    Spark安装
    安装VirtualBox后,VMware不能上网
    Hadoop Eclipse插件编译
    MapReduce 常见问题
    MapReduce 气象数据集
    Maven构建Hadoop开发环境
    Eclipse安装Maven
    吴恩达深度学习笔记 course4 week2 深度卷积网络 实例探究
    吴恩达深度学习笔记 cousrse4 week1作业
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/7608762.html
Copyright © 2011-2022 走看看