codevs 2038 香甜的黄油x+luogu P1828 x
农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。
农夫John很狡猾。他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。
农夫John知道每只奶牛都在各自喜欢的牧场呆着(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)。
第一行: 三个数:奶牛数N,牧场数P(2<=P<=800),牧场间道路数C(1<=C<=1450).
第二行到第N+1行: 1到N头奶牛所在的牧场号.
第N+2行到第N+C+1行: 每行有三个数:相连的牧场A、B,两牧场间距(1<=D<=255),当然,连接是双向的.
一行 输出奶牛必须行走的最小的距离和.
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
\ | \
\| \ C3
C2 @--5--@
P3 P4
8
{说明: 放在4号牧场最优. }
见描述
分类标签 Tags 点此展开
思路:
(对不起啊大佬!数组开小然后各种TLE,RE...我我我...一直70...然后就仅仅只是将数组改大而已qwq,就A了...)
言归正传,思路就是:
每个相同牧场出来的奶牛走的最优路径只有一条,所以不需要算多次,所以将位于同一起点的奶牛个数记录下来,在每个牧场都跑一遍spfa,寻找最小值.
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define Maxn 9999
#define MMM 0x7fffffff using namespace std; int n,p,c,tot,ans=MMM;
int num_qwq,head[Maxn],dist[Maxn];
bool pd[Maxn];
int cow,cishu[Maxn];
/*
神奇!
因为每个相同牧场出来的奶牛走的最优路径只有一条,
所以不需要算多次
*/
queue<int>q; struct cower
{
int next,to,lenth;
} qwq[Maxn];///邻接表 void add(int from,int to,int lenth)
{
qwq[++num_qwq].next=head[from];
qwq[num_qwq].to=to;
qwq[num_qwq].lenth=lenth;
head[from]=num_qwq;
} void sweetbutter(int s)
{
while(!q.empty()) q.pop();
dist[s]=;
q.push(s);
pd[s]=;
int father,son;
while(!q.empty())
{
father=q.front();
for(int p=head[father]; p!=-; p=qwq[p].next)
{
son=qwq[p].to;
int w=qwq[p].lenth;
if(dist[father]+w<dist[son])
{
dist[son]=dist[father]+w;
if(!pd[son])
{
q.push(son);
pd[son]=;
}
}
}
pd[father]=;
q.pop();
}
} int main()
{
scanf("%d %d %d",&n,&p,&c);
for(int i=; i<=n; i++)
{
scanf("%d",&cow);
cishu[cow]++;///记录奶牛出现在各个牧场的次数
}
memset(head,-,sizeof(head));
int a,b,d;
for(int i=; i<=c; i++)
{
scanf("%d %d %d",&a,&b,&d);
add(a,b,d);
add(b,a,d);
}
for(int i=; i<=p; i++)
{
fill(dist,dist+Maxn,MMM);
sweetbutter(i);
tot=;
for(int j=; j<=p; j++)///这样可以快好多!!!
tot+=dist[j]*cishu[j];
if(tot<ans) ans=tot;
}
printf("%d",ans);
return ;
}
codevs 2038 香甜的黄油x+luogu P1828 x的更多相关文章
- codevs 2038 香甜的黄油 USACO
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上 ...
- AC日记——香甜的黄油 codevs 2038
2038 香甜的黄油 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 农夫Jo ...
- 洛谷P1828 香甜的黄油 Sweet Butter
P1828 香甜的黄油 Sweet Butter 241通过 724提交 题目提供者JOHNKRAM 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 我的SPFA为什么TLE.. 为 ...
- P1828 香甜的黄油 Sweet Butter 最短路 寻找一个点使得所有点到它的距离之和最小
P1828 香甜的黄油 Sweet Butter 闲来无事 写了三种最短路(那个Floyed是不过的) 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1 ...
- 【香甜的黄油 Sweet Butter】
[香甜的黄油 Sweet Butter] 洛谷P1828 https://www.luogu.org/problemnew/show/P1828 JDOJ 1803 https://neooj.com ...
- Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★ 输入文件:butter.in 输出文件 ...
- Sweet Butter 香甜的黄油
Sweet Butter 香甜的黄油 题目大意:m个点,n头奶牛,p条边,每一头奶牛在一个点上,一个点可以有多只奶牛,求这样一个点,使得所有奶牛到这个点的距离之和最小. 注释:n<=500 , ...
- [LUOGU] P1828 香甜的黄油 Sweet Butter
题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...
- T2038 香甜的黄油 codevs
http://codevs.cn/problem/2038/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 农夫John ...
随机推荐
- promise和async/await的用法
promise和async都是做异步处理的, 使异步转为同步 1.promise 它和Promise诞生的目的都是为了解决“回调地狱”, promise使用方法: <button @click= ...
- JavaScript event对象clientX,offsetX,screenX异同
event对象是JavaScript中最重要的对象之一,他代表了各种事件的状态,在各种事件的事件处理中经常用到,比如键盘活动.鼠标活动等等,其中有几个对象官方说的比较模糊,很难理解,这里有必要通俗化的 ...
- Period II
For each prefix with length P of a given string S,if S[i]=S[i+P] for i in [0..SIZE(S)-p-1], then the ...
- 面向对象super 练习
看代码写结果[如果有错误,则标注错误即可,并且假设程序报错可以继续执行] class Foo(object): a1 = 1 def __init__(self,num): self.num = nu ...
- LNMP环境搭建哈哈
经过一番折腾,终于将LNMP环境搭建完成了.本文介绍的LNMP环境是在windows的Oracle VM VirtualBox中的Centos虚拟机上搭建的,各个软件的版本为:Centos7 + Ng ...
- mongodb连接警告修复
问题 Node.js中mongoose模块连接MongoDB数据库时提示(node:12580) DeprecationWarning: current URL string parser is de ...
- arcgis server10.2自带打印模板路径
找到arcgis server10.2安装目录路径,我的安装路径为C盘,如下: C:\Program Files\ArcGIS\Server\Templates\ExportWebMapTemplat ...
- webpack output的path publicPath
path是用来定义入口文件保存的地址,而publicPath是定义非入口文件需要抽离保存的第三方文件的保存地址 vue-cli 中HtmlWebpackPlugin生成html,都会存在path路径上 ...
- Ubuntu 增加新用户并赋予root权限及免密的方法
添加用户 添加一个名为hylink的用户 adduser hylink 修改密码 passwd hylink Changing password for user hylink. New UNIX p ...
- MIT-线性代数公开课
本博客是学习MIT-线性代数笔记,Gilbert Strang大神讲的通俗易懂,感兴趣的可以观看视频 其中习题集请点击 01)方程组的几何解释 02)矩阵消元 03)乘法和逆矩阵 04)A的LU分解 ...