题目描述

农夫$John$发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道$N(1\leqslant N\leqslant 500)$只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。

农夫$John$很狡猾。像以前的$Pavlov$,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。

农夫$John$知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)

输入格式

第一行: 三个数:奶牛数$N$,牧场数$P(2\leqslant P\leqslant 800)$,牧场间道路数$C(1\leqslant C\leqslant 1450)$

第二行到第$N+1$行: $1$到$N$头奶牛所在的牧场号

第$N+2$行到第$N+C+1$行: 每行有三个数:相连的牧场$A,B$,两牧场间距离$D(1\leqslant D\leqslant 255)$,当然,连接是双向的

输出格式

一行 输出奶牛必须行走的最小的距离和

样例数据

输入

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

输出

  1. 8

分析

枚举所有农场并对每个点都$SPFA$,求和取最小值

代码

  1. #include <bits/stdc++.h>
  2.  
  3. #define Space putchar(' ')
  4. #define Enter puts("")
  5. #define MAXN 100010
  6.  
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10. typedef double Db;
  11.  
  12. inline ll Read()
  13. {
  14. ll Ans = 0;
  15. char Ch = getchar() , Las = ' ';
  16. while(!isdigit(Ch))
  17. {
  18. Las = Ch;
  19. Ch = getchar();
  20. }
  21. while(isdigit(Ch))
  22. {
  23. Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
  24. Ch = getchar();
  25. }
  26. if(Las == '-')
  27. Ans = -Ans;
  28. return Ans;
  29. }
  30.  
  31. inline void Write(ll x)
  32. {
  33. if(x < 0)
  34. {
  35. x = -x;
  36. putchar('-');
  37. }
  38. if(x >= 10)
  39. Write(x / 10);
  40. putchar(x % 10 + '0');
  41. }
  42.  
  43. struct Edge
  44. {
  45. int Next , To , Dis;
  46. }E[MAXN];
  47.  
  48. int Dis[MAXN] , Head[MAXN] , Count;
  49.  
  50. inline void Add_Edge(int u , int v , int d)
  51. {
  52. E[++Count].Dis = d;
  53. E[Count].To = v;
  54. E[Count].Next = Head[u];
  55. Head[u] = Count;
  56. }
  57.  
  58. int n , p , c , Start;
  59. int G[MAXN];
  60. queue <int> Q;
  61. bool Visit[MAXN];
  62.  
  63. inline void SPFA()
  64. {
  65. memset(Visit , false , sizeof(Visit));
  66. for(int i = 1; i <= p; i++)
  67. Dis[i] = MAXN;
  68. Dis[Start] = 0;
  69. Q.push(Start);
  70. Visit[Start] = true;
  71. while(!Q.empty())
  72. {
  73. int u = Q.front();
  74. Q.pop();
  75. Visit[u] = false;
  76. for(int i = Head[u]; i; i = E[i].Next)
  77. {
  78. int v = E[i].To;
  79. if(Dis[v] > Dis[u] + E[i].Dis)
  80. {
  81. Dis[v] = Dis[u] + E[i].Dis;
  82. if(!Visit[v])
  83. {
  84. Q.push(v);
  85. Visit[v] = true;
  86. }
  87. }
  88. }
  89. }
  90. }
  91.  
  92. int main()
  93. {
  94. n = Read() , p = Read() , c = Read();
  95. for(int i = 1; i <= n; i++)
  96. G[i] = Read();
  97. for(int i = 1; i <= c; i++)
  98. {
  99. int u = Read() , v = Read() , d = Read();
  100. Add_Edge(u , v , d);
  101. Add_Edge(v , u , d);
  102. }
  103. int MIN = 999999999;
  104. for(int i = 1; i <= p; i++)
  105. {
  106. Start = i;
  107. SPFA();
  108. int Ans = 0;
  109. for(int j = 1; j <= n; j++)
  110. Ans += Dis[G[j]];
  111. MIN = min(MIN , Ans);
  112. }
  113. Write(MIN);
  114. return 0;
  115. }

P1828 [USACO3.2]香甜的黄油 Sweet Butter的更多相关文章

  1. 洛谷P1828 香甜的黄油 Sweet Butter

    P1828 香甜的黄油 Sweet Butter 241通过 724提交 题目提供者JOHNKRAM 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 我的SPFA为什么TLE.. 为 ...

  2. P1828 香甜的黄油 Sweet Butter 最短路 寻找一个点使得所有点到它的距离之和最小

    P1828 香甜的黄油 Sweet Butter 闲来无事 写了三种最短路(那个Floyed是不过的) 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1 ...

  3. 【香甜的黄油 Sweet Butter】

    [香甜的黄油 Sweet Butter] 洛谷P1828 https://www.luogu.org/problemnew/show/P1828 JDOJ 1803 https://neooj.com ...

  4. [最短路]P1828 香甜的黄油 Sweet Butter

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...

  5. P1828 香甜的黄油 Sweet Butter

    对于这道洛谷ac而我整了一下午的codevs的题,我也是很绝望啊. 原因是队列数组开小了我勒个去???我说STL怎么能过 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧 ...

  6. [LUOGU] P1828 香甜的黄油 Sweet Butter

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...

  7. P1828 香甜的黄油 Sweet Butter (spfa)

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...

  8. 洛谷 题解 P1828 【香甜的黄油 Sweet Butter】

    潇洒の开始 第一步:食用头文件和定义变量, 变量干什么用的说的很清楚 #include<iostream> #include<cstdio> #include<cstri ...

  9. 洛谷 P1828 【香甜的黄油 Sweet Butter】

    这道题应该就是模板题了吧qwq. 统计每一个牧场的放糖的情况,选择最优的即可 有亿点水的绿题. #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. [CTF]Brainfuck/Ook!编码

    [CTF]Brainfuck/Ook!编码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_408 ...

  2. (3) arm 指令

    跳转指令1.1 B 跳转指令 B{cond} label 说明:如果条件cond满足,arm处理器将立即跳转到label指定的地址处继续执行.1.2 BL 带链接的跳转指令 BL{cond} labe ...

  3. ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(上)

    快速上手多人游戏服务器开发.后续会基于 Google Agones,更新相关 K8S 运维.大规模快速扩展专用游戏服务器的文章.拥抱️原生 Cloud-Native! 快速开始 在开始之前,让我们确保 ...

  4. InnoDB解决幻读的方案——LBCC&MVCC

    最近要在公司内做一次技术分享,思来想去不知道该分享些什么,最后在朋友的提示下,准备分享一下MySQL的InnoDB引擎下的事务幻读问题与解决方案--LBCC&MVCC.经过好几天的熬夜通宵,终 ...

  5. DLL注入技术(输入法注入)

    输入法注入原理 IME输入法实际就是一个dll文件(后缀为ime),此dll文件需要导出必要的接口供系统加载输入法时调用.我们可以在此ime文件的DllMain函数的入口通过调用LoadLibrary ...

  6. Windows进程间通讯(IPC)----信号量

    线程同步内核对象 操作系统进行进程间同步是利用信号量机制.对于windows系统而言,可以利用一些内核对象进行线程同步,因为这些内核对象可以命名并且属于系统内核,所以可以支持不同进程间的线程同步进而实 ...

  7. Visual Lab Online —— 事后分析

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:事后分析 事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件使得编写简 ...

  8. python文件对象几种操作模式区别——文件操作方法详解

    文件对象的字节模式/b模式(以utf-8编码为例) 读操作 写操作 指针操作 ASCII字节 返回bytes/字节类型的Ascii 写入bytes类型字节 例如:b'This is ascii' 使用 ...

  9. 搭建LAMP环境部署Ecshop电商网站

    实战-部署Ecshop电商网站 实验环境 Centos7 ip:192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl stop fi ...

  10. 四大浏览器JavaScript性能/硬件加速测试

    四大浏览器JavaScript性能/硬件加速测试 出处:快科技 2010-09-19 10:52:59    人气: 27925 次   作者:萧萧 编辑:萧萧[爆料]  评论(42)  收藏文章 新 ...