香甜的黄油 Sweet Butter
原题链接:https://www.luogu.org/problem/show?pid=1828#sub
经典的最短路问题。
各位不要被题目条件迷惑了,牧场想象成点,道路想象成边,奶牛所在的位置想象成点权就好。
输入的是无向图,所以在正向连边时反向连边。然后我们枚举所有的牧场,以枚举到的牧场作为起点寻求最短路,记录好dis数组。
算出最短路径后我们再枚举所有奶牛,开一个变量nowans记录以当前牧场为集合地点的所有牛需要走的最短路径,便有nowans += dis[c[j]] (j枚举自1到奶牛数)。
然后维护一下ans,输出就好了。
其实这题如果数据量较小的话可以用floyed求最短路。
参考代码:
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#define maxn 23333
#define INF 2147483647
using namespace std;
struct Edge{
int from,to,dis;
};
Edge edge[maxn];
int head[maxn];
int dis[maxn];
int u,v,d,tot = ;
bool inq[maxn];
int c[maxn];
int N,P,C;
int ans = INF;
int nowans;
void add_edge(int from,int to,int dis){
edge[++tot].from = head[from];
edge[tot].to = to;
edge[tot].dis = dis;
head[from] = tot;
} void spfa(int s){
memset(inq,false,sizeof(inq));
for (int i=;i<=P;i++)
dis[i] = INF;
dis[s] = ;
queue<int> q;
q.push(s);
inq[s] = true;
while (!q.empty()){
int u = q.front();
q.pop();
inq[u] = false;
for (int i = head[u];i!=;i=edge[i].from){
int v = edge[i].to;
int w = edge[i].dis;
if (dis[u] + w < dis[v]){
dis[v] = w + dis[u];
if (!inq[v]){
inq[v] = true;
q.push(v);
}
}
}
}
} int main(){
cin >> N >> P >> C;
for (int i=;i<=N;i++)
cin >> c[i];
for (int i=;i<=C;i++){
cin >> u >> v >> d;
add_edge(u,v,d);
add_edge(v,u,d);
}
for (int i=;i<=P;i++){
spfa(i);
nowans = ;
for (int j=;j<=N;j++)
nowans += dis[c[j]];
ans = min(ans,nowans);
}
cout << ans << endl;
return ;
}
香甜的黄油 Sweet Butter的更多相关文章
- 洛谷P1828 香甜的黄油 Sweet Butter
P1828 香甜的黄油 Sweet Butter 241通过 724提交 题目提供者JOHNKRAM 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 我的SPFA为什么TLE.. 为 ...
- 【香甜的黄油 Sweet Butter】
[香甜的黄油 Sweet Butter] 洛谷P1828 https://www.luogu.org/problemnew/show/P1828 JDOJ 1803 https://neooj.com ...
- P1828 香甜的黄油 Sweet Butter 最短路 寻找一个点使得所有点到它的距离之和最小
P1828 香甜的黄油 Sweet Butter 闲来无事 写了三种最短路(那个Floyed是不过的) 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1 ...
- [最短路]P1828 香甜的黄油 Sweet Butter
题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...
- P1828 香甜的黄油 Sweet Butter
对于这道洛谷ac而我整了一下午的codevs的题,我也是很绝望啊. 原因是队列数组开小了我勒个去???我说STL怎么能过 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧 ...
- [LUOGU] P1828 香甜的黄油 Sweet Butter
题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...
- P1828 香甜的黄油 Sweet Butter (spfa)
题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...
- P1828 [USACO3.2]香甜的黄油 Sweet Butter
题目描述 农夫$John$发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道$N(1\leqslant N\leqslant 500)$只奶牛会过来舔它,这样就能做出能卖好价钱的超甜 ...
- USACO Section 3.2 香甜的黄油 Sweet Butter
本题是多源最短路问题 但使用弗洛伊德算法会超时 而因为边数目比较少 所以用队列优化后的迪杰斯特拉算法可以通过 #include<iostream> #include<cstring& ...
随机推荐
- java与C++变量初始化的对比
java尽力保证:所有变量在使用前都能得到恰当的初始化 ①函数/方法局部变量的初始化 在C/C++中,变量的初始化还是得依赖于程序员的自觉性.对于函数局部变量,编译器不会为基本类型赋予默认初始值,新手 ...
- maven学习3,如何创建一个web项目
Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...
- [OpenCV学习笔记2][Mat数据类型和操作]
[Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...
- destoon数据库表解释说明
----------------------------- 公司认证:vcompany 实名认证:vtarde ============================================ ...
- 注释中不允许出现字符串 "--"。
问题: 在启动tomcat时会出现如上错误,同时有可能会出现xml无法解析等错误 解决办法: 注释中不能出现字符串 "--",即需要把xml文件中多余的“--”去掉,例如: < ...
- TemplateMethod-模板模式
什么是Template Method模式 在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Mehtod模式.模板模式的关键是:子类可以置换掉父类的可变部分,但是子类却不可 ...
- Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机
生成已有特殊化非托管磁盘的方法主要有如下两种: 1.使用StorageExplorer存储管理工具,复制特殊化磁盘到一个新的容器下 2.New Portal中删除虚拟机,默认vhd文件会保留在存储账号 ...
- linux_nginx环境配置
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm # 安装阿里的epel源 国内使用web站点最多的w ...
- JavaScript中事件绑定的三种方式
JavaScript使得网页与用户友好交互,在使用 js 进行时间绑定的时候有三种绑定方式. 第一种:初学者以及普通写法 <div id="dom0"> <inp ...
- hibernate_xml映射exception
错误原因:在通过hibernate指示生成两个表之间的外键关系之后,一个表中引用的外键不在另一个表的参考范围里面. 解决:使之满足参考完整性 org.hibernate.TransientObject ...