题目描述 Description

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

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

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

输入描述 Input Description

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

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

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

输出描述 Output Description

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

样例输入 Sample Input
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
样例输出 Sample Output
8
{说明: 放在4号牧场最优. }
数据范围及提示 Data Size & Hint

见描述

分类标签 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的更多相关文章

  1. codevs 2038 香甜的黄油 USACO

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上 ...

  2. AC日记——香甜的黄油 codevs 2038

    2038 香甜的黄油 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 农夫Jo ...

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

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

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

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

  5. 【香甜的黄油 Sweet Butter】

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

  6. Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd

    题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★   输入文件:butter.in   输出文件 ...

  7. Sweet Butter 香甜的黄油

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

  8. [LUOGU] P1828 香甜的黄油 Sweet Butter

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

  9. T2038 香甜的黄油 codevs

    http://codevs.cn/problem/2038/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond   题目描述 Description 农夫John ...

随机推荐

  1. POJ 1330 Nearest Common Ancestors (dfs+ST在线算法)

    详细讲解见:https://blog.csdn.net/liangzhaoyang1/article/details/52549822 zz:https://www.cnblogs.com/kuang ...

  2. Spring Security Session Time Out

    最近在用Spring Security做登录管理,登陆成功后,页面长时间无操作,超过session的有效期后,再次点击页面操作,页面无反应,需重新登录后才可正常使用系统. 为了优化用户体验,使得在se ...

  3. 杭州集训Day4

    别问我为什么没有前三天,有时间再补~ 60+60+50=170. T1 . 坐等 memset0 ( 1s 256MB )( 原题:洛谷CF1151E Number of Components ) 树 ...

  4. MySql日期加天数,小时,分钟...得到新的时间

    在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE(), interval 3 day); 在指定的日期上加三天: SELECT date_add('2014 ...

  5. Tomcat进程、SFTP服务器

    查看Tomcat是否以关闭 ps -ef|grep tomcat port sftp -oPort=60001 root@192.168.0.254

  6. MySQL数据库生成数据库说明文档

    在半年多前为一个MySQL数据库生成过数据库说明文档,今天要重新生成一份,但是发现完全不记得当时是怎么生成的,只能在网上搜索重来一遍,所以今天特意把这个过程记录一下. 一.安装 使用MySQL数据库表 ...

  7. js--事件--事件代理

    js--事件--事件代理:https://blog.csdn.net/github_34514750/article/details/53067133

  8. [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理)

    [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数. ...

  9. 题解 CF1119A 【Ilya and a Colorful Walk】

    此题就是:给你一个数组,让你找出两个不同的元素,并让它们的下标差距最大. 思路:从2到n,如果与1不同,记录距离,与原数比较,取大. 从1到n-1,如果与n不同,记录距离,与原数比较,取大. AC代码 ...

  10. 利用CSS的translate属性或利用CSS实现图片居中的效果

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...