这题我自己是用邻接矩阵+dijskstra方法来求的,第九个例子TLE。网上看了别人的代码,是用邻接表+BFS来完成。

这里可以学到两个小技巧,邻接表的表示方法和INT_MAX的表示方法。

 /*
 ID:yingzho1
 LANG:C++
 TASK:butter
 */
 #include<fstream>
 #include<cstring>
 #include<queue>
 #include <limits>
 using namespace std;

 ifstream fin("butter.in");
 ofstream fout("butter.out");

 ;

 struct vertex
 {
         int end,len;
 };
 vertex adj[MAX][MAX];

 }, cowpos[]={}, n, p, c;
 };
 int distances[MAX];

 int search(int start)
 {
         memset(pushed, , sizeof(pushed));
         ; k <= p; k++)
             distances[k] = numeric_limits<int>::max();

         queue<int> Q;
         Q.push(start);
         pushed[start] = true;
         distances[start] = ;
         while(!Q.empty())
         {
                 int x = Q.front();
                 Q.pop();
                 pushed[x] = false;
                 ; j < cnt[x]; j++)
                 {
                         if(distances[x]+adj[x][j].len < distances[adj[x][j].end])
                         {
                                 distances[adj[x][j].end] = distances[x]+adj[x][j].len;
                                 if(!pushed[adj[x][j].end])
                                 {
                                         Q.push(adj[x][j].end);
                                         pushed[adj[x][j].end] = true;
                                 }
                         }
                 }
         }

         ;

         ; i<=n; i++)
         {
                 ;
                 else  ans+=distances[cowpos[i]];
         }
         return ans;
 }

 int main()
 {
         memset(cnt, , sizeof(cnt));
         fin>>n>>p>>c;
         ; i<=n; i++)
                 fin>>cowpos[i];

         , s, t, value; i <= c; i++)
         {
                 fin>>s>>t>>value;
                 adj[s][cnt[s]].end = t; adj[s][cnt[s]].len = value; cnt[s]++;
                 adj[t][cnt[t]].end = s; adj[t][cnt[t]].len = value; cnt[t]++;
         }

         int res, mins = numeric_limits<int>::max();
         ; i <= p; i++)
         {
                 res = search(i);
                 ) mins  =  res;
         }

         fout<<mins<<endl;
         ;
 }

USACO Section 3.2: Sweet Butter的更多相关文章

  1. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  2. USACO 3.2.6 Sweet Butter 香甜的黄油(最短路)

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

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

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

  4. Sweet Butter 香甜的黄油

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

  5. 【香甜的黄油 Sweet Butter】

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

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

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

  7. USACO Section 3.2 香甜的黄油 Sweet Butter

    本题是多源最短路问题 但使用弗洛伊德算法会超时 而因为边数目比较少 所以用队列优化后的迪杰斯特拉算法可以通过 #include<iostream> #include<cstring& ...

  8. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

  9. USACO Section 3.3: Riding the Fences

    典型的找欧拉路径的题.先贴下USACO上找欧拉路径的法子: Pick a starting node and recurse on that node. At each step: If the no ...

随机推荐

  1. 【Length of Last Word】cpp

    题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return t ...

  2. Google Guava学习笔记——简介

    Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必 ...

  3. 我是IT小小鸟,老师我之前上传了!!!!老是请您看到我

    我是IT小小鸟读后感 世界上没有一蹴而就的成功者,只有头悬梁锥刺股的奋斗者.蜉蝣向往大鹏的辉煌,却不曾知大鹏以往的汗水.蜉蝣之所以为蜉蝣,是因为它犹如井底之蛙,目光短浅,之盲目地羡慕成功者,而大鹏之所 ...

  4. 【POJ】【3680】Intervals

    网络流/费用流 引用下题解: lyd: 首先把区间端点离散化,设原来的数值i离散化后的标号是c[i].这样离散化之后,整个数轴被分成了一段段小区间. 1.建立S和T,从S到离散化后的第一个点连容量K, ...

  5. JDBC数据库连接池原理

    JDBC是java数据库连接的简称.它是一种用于实行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.其相关的API都在java.sql.*包下 ...

  6. 使用微信JSSDK自定义分享内容

    微信在6.0.2.58版本以后开始使用新的api,在Android系统中不能用以前的代码来自定义分享内容了. 现在自定义内容的方法走的是公众号的一套流程 1获取access_token 2得到toke ...

  7. 引擎设计跟踪(九.14.2c) 最近一些小的更新

    1. bump map与normal map 昨天拿了crytek sponza(http://www.crytek.com/cryengine/cryengine3/downloads)场景测试, ...

  8. windows 7 下快速搭建php环境 windows7+IIS7+php

    1.       安装IIS v7.0 控制面板-程序和功能-打开或关闭Windows 功能 测试是否成功安装IIS v7.0,在浏览器输入:http://localhost/ 或者http://12 ...

  9. SQLite中的日期基础

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间 date()...........................产生日期 t ...

  10. 关于mysql 连接数

    mysql基本维护,就必须要知道连接数 进入mysql ,show status    Threads_connected  当前的连接数    Connections  试图连接到(不管是否成功)M ...