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

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

时间:2017-12-30 16:03:10      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:size   holding   show   des   toolbar   follow   describe   targe   www.   

题目描述

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;
}

 

 

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

标签:size   holding   show   des   toolbar   follow   describe   targe   www.   

原文地址:https://www.cnblogs.com/cangT-Tlan/p/8149910.html

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