butter
题目描述
农夫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的更多相关文章
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
- Android:Butter Knife 8.0.1配置
github地址:https://github.com/GarsonZhang/butterknife Butter Knife Field and method binding for Androi ...
- [轉]Android Libraries 介紹 - Butter knife
原文地址 Butter Knife 簡介 Butter Knife - Field and method binding for Android views.助你簡化程式碼,方便閱讀. 使用方法 開發 ...
- USACO 3.2 butter 最短路
堆优化dijkstra /* PROB:butter LANG:C++ */ #include <iostream> #include <cstdio> #include &l ...
- 洛谷P1828 香甜的黄油 Sweet Butter
P1828 香甜的黄油 Sweet Butter 241通过 724提交 题目提供者JOHNKRAM 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 我的SPFA为什么TLE.. 为 ...
- USACO Section 3.2: Sweet Butter
这题我自己是用邻接矩阵+dijskstra方法来求的,第九个例子TLE.网上看了别人的代码,是用邻接表+BFS来完成. 这里可以学到两个小技巧,邻接表的表示方法和INT_MAX的表示方法. /* ID ...
- android注解[Jake Wharton Butter Knife]
Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatical ...
- USCAO3.26Sweet Butter(SPFA)
最短路复杂度估计错误 以为SPFA是N*m的 用了dij超时 用SPFA直接跑就好了 O(k*e) K 一般为2,3: /* ID: shangca2 LANG: C++ TASK: butter * ...
- Butter Knife使用详解
Butter Knife Github地址: https://github.com/JakeWharton/butterknife 官方说明给出的解释是 Bind Android views and ...
- 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 ...
随机推荐
- Jmeter JDBC Request 查询语句中有汉字查询结果为空的解决方法
搜索接口我会校验返回值,查询JDBC Request 查询语句有中文字的时候查询会有问题. 解决方法很简单,在JDBC Connection Configuration的Database URL里加一 ...
- 正则表达式之javascript
1.正则表达式的定义 描述字符模式的对象,JavaScript的RepExp类表示正则表达式 var pattern = new RegExp("s\("); <=> ...
- jQuery validate and groups - how to avoid errorPlacement usage?
本文参照:https://stackoverflow.com/questions/14146893/using-groups-with-jquery-form-validation-how 指定错误提 ...
- Spark集群的任务提交执行流程
本文转自:https://www.linuxidc.com/Linux/2018-02/150886.htm 一.Spark on Standalone 1.spark集群启动后,Worker向Mas ...
- Linux-iconv命令之批处理(18)
iconv命令是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行 常用选项 -f font1 :(from)将font1型的字符编码进行转换 -t font2 ...
- 基于webpack的react脚手架
一.前言:react的cli开发模式太过于简单,好多东西都要自己配置 二.这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译l ...
- 【19】中间者模式(Mediator Pattern)
一.引言 在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 二. 中介者模式的介绍 2.1 ...
- git命令详解( 二 )
这是git详解的第二篇,最近这个加班有点虚,所以文章也写的比较懒了,一到加班不得已,保温杯里泡枸杞啊,不扯了,今天我们来看看git的第二篇 这篇内容主要是git的一些远程命令 远程仓库 git clo ...
- Html5画钟表盘/指针实时跳动
1.最终效果 时钟.分钟.秒指针连续移动2.完整代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml&q ...
- 【转】64位系统下无法使用libpam-mysql的md5
转自:http://superwf.dyndns.info/?p=331 Aug 23 09:05:57 wfoffice saslauthd[7235]: pam_mysql – non-crypt ...