• 洛谷 P2935 [USACO09JAN]最好的地方Best Spot


    题目描述

    Bessie, always wishing to optimize her life, has realized that she really enjoys visiting F (1 <= F <= P) favorite pastures F_i of the P (1 <= P <= 500; 1 <= F_i <= P) total pastures (conveniently

    numbered 1..P) that compose Farmer John's holdings.

    Bessie knows that she can navigate the C (1 <= C <= 8,000) bidirectional cowpaths (conveniently numbered 1..C) that connect various pastures to travel to any pasture on the entire farm. Associated with each path P_i is a time T_i (1 <= T_i <= 892) to traverse that path (in either direction) and two path endpoints a_i and b_i (1 <= a_i <= P; 1 <= b_i <= P).

    Bessie wants to find the number of the best pasture to sleep in so that when she awakes, the average time to travel to any of her F favorite pastures is minimized.

    By way of example, consider a farm laid out as the map below shows, where *'d pasture numbers are favorites. The bracketed numbers are times to traverse the cowpaths.

    
                1*--[4]--2--[2]--3
                         |       |
                        [3]     [4]
                         |       |
                         4--[3]--5--[1]---6---[6]---7--[7]--8*
                         |       |        |         |
                        [3]     [2]      [1]       [3]
                         |       |        |         |
                        13*      9--[3]--10*--[1]--11*--[3]--12*

    The following table shows distances for potential 'best place' of pastures 4, 5, 6, 7, 9, 10, 11, and 12:

          * * * * * * Favorites * * * * * *
     Potential      Pasture Pasture Pasture Pasture Pasture Pasture     Average
    Best Pasture       1       8      10      11      12      13        Distance
    ------------      --      --      --      --      --      --      -----------
        4              7      16       5       6       9       3      46/6 = 7.67
        5             10      13       2       3       6       6      40/6 = 6.67
        6             11      12       1       2       5       7      38/6 = 6.33
        7             16       7       4       3       6      12      48/6 = 8.00
        9             12      14       3       4       7       8      48/6 = 8.00
       10             12      11       0       1       4       8      36/6 = 6.00 ** BEST
       11             13      10       1       0       3       9      36/6 = 6.00
       12             16      13       4       3       0      12      48/6 = 8.00
    

    Thus, presuming these choices were the best ones (a program would have to check all of them somehow), the best place to sleep is pasture 10.

    约翰拥有P(1<=P<=500)个牧场.贝茜特别喜欢其中的F个.所有的牧场 由C(1 < C<=8000)条双向路连接,第i路连接着ai,bi,需要1(1<=Ti< 892)单 位时间来通过.

    作为一只总想优化自己生活方式的奶牛,贝茜喜欢自己某一天醒来,到达所有那F个她喜欢的 牧场的平均需时最小.那她前一天应该睡在哪个牧场呢?请帮助贝茜找到这个最佳牧场.

    此可见,牧场10到所有贝茜喜欢的牧场的平均距离最小,为最佳牧场.

    输入输出格式

    输入格式:

     

    • Line 1: Three space-separated integers: P, F, and C

    • Lines 2..F+1: Line i+2 contains a single integer: F_i

    • Lines F+2..C+F+1: Line i+F+1 describes cowpath i with three

    space-separated integers: a_i, b_i, and T_i

     

    输出格式:

     

    • Line 1: A single line with a single integer that is the best pasture in which to sleep. If more than one pasture is best, choose the smallest one.

     

    输入输出样例

    输入样例#1: 复制
    13 6 15 
    11 
    13 
    10 
    12 
    8 
    1 
    2 4 3 
    7 11 3 
    10 11 1 
    4 13 3 
    9 10 3 
    2 3 2 
    3 5 4 
    5 9 2 
    6 7 6 
    5 6 1 
    1 2 4 
    4 5 3 
    11 12 3 
    6 10 1 
    7 8 7 
    
    输出样例#1: 复制
    10 
    

    说明

    As the problem statement

    As the problem statement.

    思路:先跑一遍floyed,然后暴力枚举即可。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 510
    using namespace std;
    int P,F,C,ans;
    int maxn=0x7f7f7f7f;
    int f[MAXN],map[MAXN][MAXN];
    int main(){
        scanf("%d%d%d",&P,&F,&C);
        for(int i=1;i<=F;i++)
            scanf("%d",&f[i]);
        for(int i=1;i<=P;i++)
            for(int j=1;j<=P;j++){
                map[i][j]=999999;
                if(i==j)    map[i][j]=0;
            }
        for(int i=1;i<=C;i++){
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            map[x][y]=map[y][x]=z;
        }
        for(int k=1;k<=P;k++)
            for(int i=1;i<=P;i++)
                for(int j=1;j<=P;j++)
                    if(i!=k&&k!=j&&i!=j&&map[i][k]+map[k][j]<map[i][j])
                        map[i][j]=map[i][k]+map[k][j];
        for(int i=1;i<=P;i++){
            long long sum=0;
            for(int j=1;j<=F;j++)
                sum+=map[i][f[j]];
            if(sum<maxn){
                maxn=sum;
                ans=i;
            }
        }
        cout<<ans;
    }

     

    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    对获取的DataTable表进行过滤筛选得到DataView
    简单提取iOS13的ipsw固件的内置壁纸(或文件)
    win10设置Python程序定时运行(设置计划任务)
    后端返回一个这种类型的时间格式给前端2020-01-16T09:10:02.349Z
    js把每个词的首字母转大写
    idea连接mysql自动生成实体类
    el自定义函数
    js日期时间格式化
    js大小写转换
    js瞄点
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8149910.html
Copyright © 2020-2023  润新知