Description

农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。 农夫John很狡猾。像以前的Pavlov,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。 农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)

Input

第一行: 三个数:奶牛数N,牧场数(2<=P<=800),牧场间道路数C(1<=C<=1450) 第二行到第N+1行: 1到N头奶牛所在的牧场号 第N+2行到第N+C+1行: 每行有三个数:相连的牧场A、B,两牧场间距离D(1<=D<=255),当然,连接是双向的

Output

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

Sample Input

3 4 5
2
3
4
1 2 1
1 3 5
2 3 7
2 4 3
3 4 5
/*
{样例图形P2  P1 @--1--@ C1\    |\\   | \5  7  3\ |   \\|    \ C3C2 @--5--@P3    P4
}
*/

Sample Output

8
/*{说明:放在4号牧场最优
}*/

解题思路:最短路问题,找到一个点,所有目标点到该点的距离之和最短。我最开始想用Floyd算法,我觉得最多不就是800个点,n^3应该不超时,但还是超时了,对于这道题应该使用SPFA算法,SPFA是求最短路的算法中时间复杂度最低的算法。
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <queue>
 6 #define inf 0x3f3f3f3f
 7 #define maxn 1500
 8 using namespace std;
 9 struct EDGE
10 {
11     int to;
12     int v;
13 } t;
14 vector<EDGE>e[maxn];
15 int n,m,z;
16 int a[maxn];
17 int vis[maxn];
18 int dis[maxn];
19 void add(int from,int to,int v)
20 {
21     t.to=to;
22     t.v=v;
23     e[from].push_back(t);
24 }
25 void SPFA(int s)
26 {
27     queue<int> q;
28     int i;
29     for(i=1;i<=n;i++)///每次调用的初始化
30     {
31         dis[i]=inf;
32         vis[i]=0;
33     }
34     q.push(s);
35     dis[s] = 0;
36     vis[s] = 1;
37     while(!q.empty())
38     {
39         int now=q.front();
40         q.pop();
41         vis[now]=0;///弹出队列,取消标志
42         for(i=0;i<e[now].size();i++)
43         {
44             if(dis[e[now][i].to]>dis[now]+e[now][i].v)
45             {
46                 dis[e[now][i].to]=dis[now]+e[now][i].v;
47                 if(!vis[e[now][i].to])///不在队列就加到队列中
48                 {
49                     vis[e[now][i].to]=1;
50                     q.push(e[now][i].to);
51                 }
52             }
53         }
54     }
55 }
56 int main()
57 {
58     int from,to,v,i,j,mins,ans;
59     scanf("%d%d%d",&z,&n,&m);
60     for(i=1; i<=z; i++)
61     {
62         scanf("%d",&a[i]);
63     }
64     mins=inf;
65     for(i=1; i<=m; i++)
66     {
67         scanf("%d%d%d",&from,&to,&v);
68         add(from,to,v);
69         add(to,from,v);
70     }
71     for(i=1; i<=n; i++)
72     {
73         ans=0;
74         SPFA(i);
75         for(j=1; j<=z; j++)
76         {
77             ans+=dis[a[j]];
78         }
79         if(ans<mins)///找最小和
80         {
81             mins=ans;
82         }
83     }
84     printf("%d\n",mins);
85     return 0;
86 }

转载于:https://www.cnblogs.com/wkfvawl/p/9705780.html

USACO 3.2.6 Sweet Butter 香甜的黄油(最短路)相关推荐

  1. Sweet Butter 香甜的黄油

    Sweet Butter 香甜的黄油 题目大意:m个点,n头奶牛,p条边,每一头奶牛在一个点上,一个点可以有多只奶牛,求这样一个点,使得所有奶牛到这个点的距离之和最小. 注释:n<=500 , ...

  2. USACO 3.2 Sweet Butter 香甜的黄油

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

  3. 3.2.6 Sweet Butter香甜的黄油 USACO

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

  4. SSL-1693 USACO 3.2 Sweet Butter 香甜的黄油 (Bellman DIJ SPFA)

    题目大意 找到一个点,使得所有的有黄牛的点到这个点的距离之和最小. 思路 SPFA算法 代码 #include<cstdio> #define INF 2147483648//初始化一个很 ...

  5. 【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)

    香甜的黄油 Sweet Butter luogu 1828 题目大意: 有n头奶牛,他们在不同的牧场中,他们之间有一些路,现在要让他们去一个地方吃黄油,使他们的总距离最小 题目描述 农夫John发现做 ...

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

    香甜的黄油 Sweet Butter 黄油真的是这么做的吗?!!![惶恐] 这道题是Dijkstra算法的简单变形 通过题意我们要找到一个点使奶牛所在点的路程和最短.通过Dijkstra的模板我们可以 ...

  7. 信息学奥赛一本通 1345:【例4-6】香甜的黄油 | 洛谷 P1828 [USACO3.2]香甜的黄油 Sweet Butter

    [题目链接] ybt 1345:[例4-6]香甜的黄油 洛谷 P1828 [USACO3.2]香甜的黄油 Sweet Butter [题目考点] 1. 图论 最短路径 [解题思路] 将题目叙述转为图论 ...

  8. [USACO3.2]香甜的黄油 Sweet Butter

    香甜的黄油 1.问题分析 2.具体代码 3.总结 题目链接 1.问题分析 模拟一遍过程,就可以发现只需要先跑一遍最短路,再搜出结果就行了. 复习最短路的水题. 2.具体代码 #include < ...

  9. 香甜的黄油(SPFA)

    香甜的黄油(SPFA) Description 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好 ...

最新文章

  1. mysql怎么创建表视频教程_mySQL学习入门教程——2.创建表
  2. 3.实战HTML+CSS布局(实例入门篇)
  3. http php mysql_apache+php+mysql
  4. OpenCV 4.0 Dis光流算法 运动检测
  5. PHPExcel所遇到问题的知识点总结
  6. 文本编辑器实现文本打印的功能
  7. 全球及中国儿童滑步车市场销量需求调查与竞争格局展望报告2022年
  8. python办公代码_[Python] 自动化办公 docx操作Word基础代码
  9. php微信支付使用ajax,接入微信公众号支付,选择支付方式后,只弹出“error’”(php)...
  10. python如何导入项目,PyCharm如何导入python项目
  11. 安卓(android)毕业设计各种app项目
  12. caffe最优化方法
  13. 全网首发Modown主题8.31开心版
  14. Volatile底层实现原理
  15. 卫生保健所短信群发模板:预约挂号、就诊提醒、检查结果通知
  16. Mailgun提供了新的报告仪表板
  17. From Fidelity to Perceptual Quality: A Semi-Supervised Approach for Low-Light Image Enhancement
  18. vue 拼数字小游戏(设置表白彩蛋)
  19. java入门基础教程(纯干货知识点+视频资源)
  20. Istio - 集成ELK - HPE_INVALID_METHOD, lumberjack protocol error

热门文章

  1. python的字符串类型_python如何判断某变量是否为字符串类型
  2. brother标签打印软件_标签打印软件如何调整字体高度
  3. java随机加法题_Java简单随机加法算式
  4. linux下部署tomcat没起成功,linux下部署tomcat 上线jpress博客系统
  5. python常用标准库的基本用法_[每天一个python小技巧]Python中标准库OS的常用方法总结...
  6. linux nload_Linux nload命令
  7. android jni示例_Android动画示例
  8. python 字符串 变量_Python检查变量是字符串
  9. swagger map示例_Android Google Map Street View示例
  10. 不要运行explorer_在Internet Explorer浏览器上运行测试