题目描述

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

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

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

输入输出格式

输入格式:

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

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

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

输出格式:

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

输入输出样例

输入样例

3 4 5
2
3
4
1 2 1
1 3 5
2 3 7
2 4 3
3 4 5
输出样例

8

说明

{样例图形

          P2
P1 @--1--@ C1
|
|
5 7 3
|
| C3
C2 @--5--@
P3 P4

} {说明:

放在4号牧场最优

}

因为数据范围也给的很小,所以我们也是枚举所有的点,然后分别求距离和,最后取min。

关于分别求距离和,我们可以先初始化每一个点到所有点的路径长度,最后加和。

所以若用spfa的话时间复杂度O(nve) 或O(n^2)。

 #include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn = 2e3 + ;
const int INF = 0x3f3f3f3f;
int n, p, c;
int nn[maxn];
struct Graph
{
int id, cost;
};
vector<Graph> v[maxn];
ll ans = ;
int dis[maxn][maxn];
void init_all()
{
for(int i = ; i < maxn - ; ++i)
for(int j = ; j < maxn - ; ++j) dis[i][j] = INF;
}
bool vis[maxn], done[maxn];
void spfa(int s) //dis : every point to each point
{
memset(vis, , sizeof(vis));
memset(done, , sizeof(done));
queue<int> q; q.push(s);
dis[s][s] = ; done[s] = vis[s] = ;
while(!q.empty())
{
int now = q.front(); q.pop(); done[now] = ;
for(int i = ; i < (int)v[now].size(); ++i)
{
if(!vis[v[now][i].id])
{
if(dis[s][now] + v[now][i].cost < dis[s][v[now][i].id])
{
dis[s][v[now][i].id] = dis[s][now] + v[now][i].cost;
if(!done[v[now][i].id])
{
q.push(v[now][i].id);
done[v[now][i].id] = ;
}
}
}
}
}
}
int main()
{
freopen("butter.in", "r", stdin);
freopen("butter.out", "w", stdout);
init_all();
scanf("%d%d%d", &n, &p, &c);
for(int i = ; i <= n; ++i)
{
int x; scanf("%d", &x);
nn[x]++;
}
for(int i = ; i <= c; ++i)
{
int a, b, cost; scanf("%d%d%d", &a, &b, &cost);
v[a].push_back((Graph){b, cost}); //无向图
v[b].push_back((Graph){a, cost});
}
for(int i = ; i <= p; ++i) spfa(i); //初始化每一个点到其他点的最短路
for(int i = ; i <= p; ++i)
{
ll sum = ;
for(int j = ; j <= p; ++j) sum += nn[j] * dis[j][i]; //距离和
if(sum < ans) ans = sum;
}
printf("%lld\n", ans);
return ;
}

butter的更多相关文章

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

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

  2. Android:Butter Knife 8.0.1配置

    github地址:https://github.com/GarsonZhang/butterknife Butter Knife Field and method binding for Androi ...

  3. [轉]Android Libraries 介紹 - Butter knife

    原文地址 Butter Knife 簡介 Butter Knife - Field and method binding for Android views.助你簡化程式碼,方便閱讀. 使用方法 開發 ...

  4. USACO 3.2 butter 最短路

    堆优化dijkstra /* PROB:butter LANG:C++ */ #include <iostream> #include <cstdio> #include &l ...

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

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

  6. USACO Section 3.2: Sweet Butter

    这题我自己是用邻接矩阵+dijskstra方法来求的,第九个例子TLE.网上看了别人的代码,是用邻接表+BFS来完成. 这里可以学到两个小技巧,邻接表的表示方法和INT_MAX的表示方法. /* ID ...

  7. android注解[Jake Wharton Butter Knife]

    Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatical ...

  8. USCAO3.26Sweet Butter(SPFA)

    最短路复杂度估计错误 以为SPFA是N*m的 用了dij超时 用SPFA直接跑就好了 O(k*e) K 一般为2,3: /* ID: shangca2 LANG: C++ TASK: butter * ...

  9. Butter Knife使用详解

    Butter Knife Github地址: https://github.com/JakeWharton/butterknife 官方说明给出的解释是 Bind Android views and ...

  10. English - Green Peanut Butter

    There is a guy. He wants to drink 12 cups of green peanut butter. He needs green peanut butter. So h ...

随机推荐

  1. 玩转物联网之MQTT

    物联网概述 物联网——即Internet-of-Things,其实这个概念由来已久,简单来讲,物联网是物与物.人与物之间的信息传递与控制简称.它和能源.电子信息.医疗.交通.零售.物流.工业制造等行业 ...

  2. elasticsearch6.7 01.入门指南(3)

    4.Modifying Your Data(修改数据) Elasticsearch 提供了近实时的操纵数据和搜索的能力.默认情况下,从索引/更新/删除数据到在搜索结果中显示数据会有 1 秒的延迟(刷新 ...

  3. 移动端FastClick和editor冲突问题。

        FastClick.prototype.needsClickForParent = function (target) {         let parent = target.parent ...

  4. JS的分号可以省掉吗?

    摘要: JavaScript语言从设计之初就是考虑带分号的,使用不带分号的编码规则就要小心点啦. 背景 最近在项目中开始使用新的编码规范,一开始ESLint报一大堆错误,改得我想砸键盘,花了好些时间才 ...

  5. virtualenv的使用及pip常用命令

    一.virtualenv 1.用途: virtualenv------用来建立一个虚拟的python环境,一个专属于项目的python环境.用virtualenv 来保持一个干净的环境非常有用. 例如 ...

  6. CSS3属性-webkit-font-smoothing字体抗锯齿渲染

    对字体进行抗锯齿渲染可以使字体看起来会更清晰舒服.在图标字体成为一种趋势的今天,抗锯齿渲染使用也越来越多. font-smoothing是非标准的CSS定义.它被列入标准规范的草案中,后由于某些原因从 ...

  7. 【读书笔记】iOS-使用传感器

    和其他的高端智能机一样,iPhone携带了很多传感器:照相机,加速度计,GPS模块和数字指南针. 使用Core Motion框架,你的应用可以读取来自于加速度计,磁力计以及陀螺仪的运动数据. 近距离传 ...

  8. python之常用模块补充

    namedtuple 命名元组 ->类似创建了一个类 from collections import namedtuple p = namedtuple("point", [ ...

  9. Visualforce控制器

    Visualforce框架是遵循MVC结构的.Visualforce页面代表了"视图"部分,Salesforce的各种对象代表了"模型"部分,而Apex则代表了 ...

  10. git本地仓库关联多个remote,怎么用本地一个分支向不同remote不同分支推送代码

    我想这个问题,是大家关注的问题,这个问题,我非常关注. 背景:在公司开发项目,我们一般都要把项目推送到公司领导创建的一个远程仓库里边去,但是我们同时也有自己的小仓库,这样的话,如何方便的将我们的代码, ...