这题我自己是用邻接矩阵+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. PyDev for Eclipse 简介

    PyDev 安装和配置 安装 PyDev 在安装 PyDev 之前,要保证您已经安装了 Java 1.4 或更高版本.Eclipse 以及 Python.接下来,开始安装 PyDev 插件. 启动 E ...

  2. SQL Server性能优化(5)表设计时的注意事项

    一. 是否需要冗余列 现在一些项目的数据库设计中,为了提高查询速度,把基本表的一些列也放到了数据表里,导致数据冗余.例如在热表的数据库里,原始数据表Measure_Heat里加了如房间号,单元号,楼号 ...

  3. HDU 5592 ZYB's Premutation

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5592 题意: http://bestcoder.hdu.edu.cn/contests/contes ...

  4. 避免JS全局变量冲突

    一.原则1.1 用匿名函数将脚本包起来1.2 使用命名空间(多级) 二.改进过程 2.1 原始数据(a.js和b.js都有全局变量window.a,导致冲突,全局变量属于window) //a.js& ...

  5. 【BZOJ】【3004】吊灯

    思路题 要将整棵树分成大小相等的连通块,那么首先我们可以肯定的是每块大小x一定是n的约数,且恰好分成$\frac{n}{x}$块,所以我有了这样一个思路:向下深搜,如果一个节点的size=x,就把这个 ...

  6. 【BZOJ】【1798】【AHOI2009】Seq维护序列

    线段树 属于线段树中级应用吧…… 要打两种标记:乘法和加法标记.一开始我想着可以像只有加法标记那样,永不下传,查询的时候依次累加就好了.后来发现不会写……只好每次update的时候……遇到标记!下传! ...

  7. GS初始化

    开启GameServer模式 init函数,现在看看这个大函数干什么的 //这个init也是GameServerUI里面调的,这个线程其实就做了一些初始化的工作,其实这里面没有什么主不主线程,都是在一 ...

  8. ios后台下载

    http://www.cocoachina.com/industry/20131106/7304.html

  9. css 之优先策略

    <html> <head> <title>testCSS</title> <style type="text/css"> ...

  10. SQL技术内幕-13 SQL优化方法论之分离重量级的等待

    Code -- Isolate top waits WITH Waits AS ( SELECT wait_type, wait_time_ms / . AS wait_time_s, . * wai ...