• bzoj3394:[Usaco2009 Jan]Best Spot 最佳牧场


    Description

    Input

    第1行输入三个整数P,F C.之后F行每行输入一个整数表示一个贝茜喜欢的牧场.之后C行每行输入三个整数ai,bi,Ti,描述一条路.

    Output

    一个整数,满足题目要求的最佳牧场.如果有多个答案,输出编号最小的

    Sample Input

    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
    

    Sample Output

    10

    请容忍这个样例输入,实在太长了,但是还是告诉大家一个好消息,最短路最简单易懂(有利必有弊,效率可(gan)怕(ren))的算法floyd登场了。

    其思想又不得不提区间dp,十分相似,枚举中转点,起点,终点,跑一边,O(N^3),感人吧(小数据的最短路还是很好用的)

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int g[510][510],n,f,m,l[510],u,v,w,ans,mn=INT_MAX;
     4 int main()
     5 {
     6     scanf("%d%d%d",&n,&f,&m);
     7     memset(g,0x3f,sizeof(g));
     8     for(int i=1;i<=f;i++)
     9         scanf("%d",&l[i]);
    10     for(int i=1;i<=m;i++)
    11         scanf("%d%d%d",&u,&v,&w),g[u][v]=g[v][u]=w;
    12     for(int i=1;i<=n;i++)
    13         g[i][i]=0;
    14     for(int k=1;k<=n;k++)
    15         for(int i=1;i<=n;i++)
    16             for(int j=1;j<=n;j++)
    17                 if(g[i][k]+g[k][j]<g[i][j])
    18                     g[i][j]=g[i][k]+g[k][j];
    19     for(int i=1;i<=n;i++)
    20     {
    21         int sum=0;
    22         for(int j=1;j<=f;j++)
    23             if(g[i][l[j]]!=0x3f3f3f3f)sum+=g[i][l[j]];
    24         if(sum<mn)
    25             mn=sum,ans=i;
    26     }
    27     printf("%d",ans);
    28 }
  • 相关阅读:
    Linux 下防火墙端口操作命令
    showDoc 安装
    jeckins 编译成功,启动失败问题总结
    20212923 202120222 《网络攻防实践》第一次作业_实践一:网络攻防环境的搭建
    再次搭建程序集报错
    面试不会的别扯
    一些莫名奇妙的错误(有点伤心)
    关于端口封禁的一些事
    算法方法
    Django配置日志
  • 原文地址:https://www.cnblogs.com/lcxer/p/9441654.html
Copyright © 2020-2023  润新知