• 牛客 NC24755 [USACO 2010 Dec S]Apple Delivery


    题目描述

    Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she travels the C (1 <= C <= 200,000)
    cowpaths which are arranged as the usual graph which connects P (1 <= P <= 100,000) pastures conveniently numbered from 1..P: no cowpath leads from a pasture to itself, cowpaths are bidirectional, each cowpath has an associated distance, and, best of all, it is always possible to get from any pasture to any other pasture. Each cowpath connects two differing pastures P1iP1_iP1i​ (1 <= P1iP1_iP1i​ <= P) and P2iP2_iP2i​ (1 <= P2iP2_iP2i​ <= P) with a distance between them of DiD_iDi​. The sum of all the distances DiD_iDi​ does not exceed 2,000,000,000.
    What is the minimum total distance Bessie must travel to deliver both apples by starting at pasture PB (1 <= PB <= P) and visiting pastures PA1 (1 <= PA1 <= P) and PA2 (1 <= PA2 <= P)
    in any order. All three of these pastures are distinct, of course.

    Consider this map of bracketed pasture numbers and cowpaths with distances:
                    3        2       2
               [1]-----[2]------[3]-----[4]
                 \     / \              /
                 7\   /4  \3           /2
                   \ /     \          /
                   [5]-----[6]------[7]
                        1       2
    If Bessie starts at pasture [5] and delivers apples to pastures [1] and [4], her best path is:
          5 -> 6-> 7 -> 4* -> 3 -> 2 -> 1*
    with a total distance of 12.

    输入描述:

    * Line 1: Line 1 contains five space-separated integers: C, P, PB, PA1, and PA2
    * Lines 2..C+1: Line i+1 describes cowpath i by naming two pastures it connects and the distance between them: P1i,P2i,DiP1_i, P2_i, D_iP1i​,P2i​,Di​

    输出描述:

    * Line 1: The shortest distance Bessie must travel to deliver both apples

    示例1

    输入

    复制

    9 7 5 1 4 
    5 1 7 
    6 7 2 
    4 7 2 
    5 6 1 
    5 2 4 
    4 3 2 
    1 2 3 
    3 2 2 
    2 6 3 
    

    输出

    复制

    12

    思路:因为是双向边,因此p1到p2与p2到p1的距离是相等的,于是我们只需要比较p到p1和p到p2那个短再加上p1到p2就是答案;因为目的地数量较少所以可以直接通过两次求最短路找到答案,分别以p1和p2为起点

    AC代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. #define PII pair
    7. const int N=100010,M=400010;
    8. int n,m,p1,p2,p;
    9. int h[N],e[M],ne[M],w[M],idx;
    10. int dist[3][N];
    11. bool st[N];
    12. queue<int>q ;
    13. void add(int a,int b,int c)
    14. {
    15. e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
    16. }
    17. void dijkstra(int dist[],int s)
    18. {
    19. memset(dist,0x3f,4*N);
    20. memset(st,0,sizeof st);
    21. dist[s]=0;
    22. priority_queue,greater> q;
    23. q.push({0,s});
    24. while(!q.empty())
    25. {
    26. PII t=q.top();
    27. q.pop();
    28. int ver=t.second,dis=t.first;
    29. if(st[ver])continue;
    30. st[ver]=true;
    31. for(int i=h[ver];i!=-1;i=ne[i])
    32. {
    33. int j=e[i];
    34. if(dist[j]>dis+w[i])
    35. {
    36. dist[j]=dis+w[i];
    37. q.push({dist[j],j});
    38. }
    39. }
    40. }
    41. }
    42. int main()
    43. {
    44. memset(h,-1,sizeof h);
    45. scanf("%d%d%d%d%d",&m,&n,&p,&p1,&p2);
    46. while(m--)
    47. {
    48. int a,b,c;
    49. scanf("%d%d%d",&a,&b,&c);
    50. add(a,b,c),add(b,a,c);
    51. }
    52. dijkstra(dist[0],p1);
    53. dijkstra(dist[1],p2);
    54. cout<<min(dist[0][p],dist[1][p])+dist[0][p2];
    55. }

  • 相关阅读:
    刘二大人CNN
    上海亚商投顾:沪指冲高回落 华为概念股持续活跃
    基于人工势场法的移动机器人路径规划研究(Matlab代码实现)
    睡眠剥夺后皮层微结构的广泛变化
    拉电流、灌电流和漏电流
    Real-Time Rendering——18.4 Optimization优化
    LQ0138 分巧克力【二分法】
    CSS 布局
    水稻插秧机分叉机构壳体零件数控加工工艺工装设计
    软考132-上午题-【软件工程】-沟通路径
  • 原文地址:https://blog.csdn.net/qq_62242287/article/details/126671579