洛谷 P2984 [USACO10FEB]给巧克力Chocolate Giving
题目描述
Farmer John is distributing chocolates at the barn for Valentine's day, and B (1 <= B <= 25,000) of his bulls have a special cow in mind to receive a chocolate gift.
Each of the bulls and cows is grazing alone in one of the farm's N (2*B <= N <= 50,000) pastures conveniently numbered 1..N and connected by M (N-1 <= M <= 100,000) bidirectional cowpaths of various lengths. Some pastures might be directly connected by more than one cowpath. Cowpath i connects pastures R_i and S_i (1 <= R_i <= N; 1 <= S_i <= N) and has length L_i (1 <= L_i <= 2,000).
Bull i resides in pasture P_i (1 <= P_i <= N) and wishes to give a chocolate to the cow in pasture Q_i (1 <= Q_i <= N).
Help the bulls find the shortest path from their current pasture to the barn (which is located at pasture 1) and then onward to the pasture where their special cow is grazing. The barn connects, one way or another (potentially via other cowpaths and pastures) to every pasture.
As an example, consider a farm with 6 pastures, 6 paths, and 3 bulls (in pastures 2, 3, and 5) who wish to bestow chocolates on their love-objects:
*1 <-- Bull wants chocolates for pasture 1 cow
[4]--3--[5] <-- [5] is the pasture ID
/ |
/ |
4 2 <-- 2 is the cowpath length
/ | between [3] and [4]
[1]--1--[3]*6
/ \ /
9 3 2
/ \/
[6] [2]*4
The Bull in pasture 2 can travel distance 3 (two different ways) to get to the barn then travel distance 2+1 to pastures [3] and [4] to gift his chocolate. That's 6 altogether.
The Bull in pasture 5 can travel to pasture 4 (distance 3), then pastures 3 and 1 (total: 3 + 2 + 1 = 6) to bestow his chocolate offer.
- The Bull in pasture 3 can travel distance 1 to pasture 1 and then take his chocolate 9 more to pasture 6, a total distance of 10.
Farmer John有B头奶牛(1<=B<=25000),有N(2*B<=N<=50000)个农场,编号1-N,有M(N-1<=M<=100000)条双向边,第i条边连接农场R_i和S_i(1<=R_i<=N;1<=S_i<=N),该边的长度是L_i(1<=L_i<=2000)。居住在农场P_i的奶牛A(1<=P_i<=N),它想送一份新年礼物给居住在农场Q_i(1<=Q_i<=N)的奶牛B,但是奶牛A必须先到FJ(居住在编号1的农场)那里取礼物,然后再送给奶牛B。你的任务是:奶牛A至少需要走多远的路程?
输入输出格式
输入格式:
Line 1: Three space separated integers: N, M, and B
- Lines 2..M+1: Line i+1 describes cowpath i with three
space-separated integers: R_i, S_i, and L_i
- Lines M+2..M+B+1: Line M+i+1 contains two space separated integers: P_i and Q_i
输出格式:
- Lines 1..B: Line i should contain a single integer, the smallest distance that the bull in pasture P_i must travel to get chocolates from the barn and then award them to the cow of his dreams in pasture Q_i
输入输出样例
6 7 3
1 2 3
5 4 3
3 1 1
6 1 9
3 4 2
1 4 4
3 2 2
2 4
5 1
3 6
6
6
10
#include <ctype.h>
#include <cstring>
#include <cstdio>
#include <queue>
#define M 500005
using namespace std;
struct node
{
int x,y;
bool operator<(node a)const
{
return y>=a.y;
}
};
priority_queue<node>q;
void read(int &x)
{
x=;bool f=;
register char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=;
for(; isdigit(ch);ch=getchar()) x=x*+ch-'';
x=f?-x:x;
}
bool vis[M];
int head[M],Next[M],to[M],dist[M],cnt,dis[M],n,m,b;
int main(int argc,char *argv[])
{
read(n);
read(m);
read(b);
for(int x,y,z;m--;)
{
read(x);
read(y);
read(z);
Next[++cnt]=head[x];to[cnt]=y;dist[cnt]=z;head[x]=cnt;
Next[++cnt]=head[y];to[cnt]=x;dist[cnt]=z;head[y]=cnt;
}
memset(dis,,sizeof(dis));
dis[]=;
node a;
a.x=;
a.y=dis[];
q.push(a);
for(;!q.empty();)
{
node b=q.top();q.pop();
if(vis[b.x]) continue;
vis[b.x]=;
for(int i=head[b.x];i;i=Next[i])
{
int v=to[i];
if(dis[v]>dis[b.x]+dist[i])
{
dis[v]=dis[b.x]+dist[i];
node a;
a.x=v;
a.y=dis[v];
q.push(a);
}
}
}
for(int x,y;b--;)
{
read(x);
read(y);
printf("%d\n",dis[x]+dis[y]);
}
return ;
}
90分的堆优化
#include <cstdio>
#include <queue>
#define N 400005 using namespace std;
queue<int>q;
bool vis[N];
int n,m,b,cnt,Next[N],to[N],head[N],dist[N],dis[N];
void ins(int u,int v,int w)
{
Next[++cnt]=head[u];to[cnt]=v;dist[cnt]=w;head[u]=cnt;
Next[++cnt]=head[v];to[cnt]=u;dist[cnt]=w;head[v]=cnt;
}
void spfa(int s)
{
for(int i=;i<=n;i++) dis[i]=0x7fffffff;
dis[s]=;
vis[s]=;
q.push(s);
while(!q.empty())
{
int now=q.front();
q.pop();
vis[now]=;
for(int i=head[now];i;i=Next[i])
{
int v=to[i];
if(dis[v]>dis[now]+dist[i])
{
dis[v]=dis[now]+dist[i];
if(!vis[v])
{
vis[v]=;
q.push(v);
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&b);
for(int x,y,z;m--;)
{
scanf("%d%d%d",&x,&y,&z);
ins(x,y,z);
}
spfa();
for(int x,y;b--;)
{
scanf("%d%d",&x,&y);
printf("%d\n",dis[x]+dis[y]);
}
return ;
}
洛谷 P2984 [USACO10FEB]给巧克力Chocolate Giving的更多相关文章
- 洛谷——P2984 [USACO10FEB]给巧克力Chocolate Giving
https://www.luogu.org/problem/show?pid=2984 题目描述 Farmer John is distributing chocolates at the barn ...
- 洛谷——P2983 [USACO10FEB]购买巧克力Chocolate Buying
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying
购买巧克力Chocolate Buying 乍一看以为是背包,然后交了一个感觉没错的背包上去. #include <iostream> #include <cstdio> #i ...
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...
- 洛谷—— P2983 [USACO10FEB]购买巧克力Chocolate Buying
https://www.luogu.org/problem/show?pid=2983 题目描述 Bessie and the herd love chocolate so Farmer John i ...
- 【luogu P2984 [USACO10FEB]给巧克力Chocolate Giving】 题解
题目链接:https://www.luogu.org/problemnew/show/P2984 练习SPFA,把FJ当做起点,求出到所有牛的最短路,再把两个牛的相加. #include <cs ...
- [USACO10FEB]给巧克力Chocolate Giving
题意简叙: FarmerFarmerFarmer JohnJohnJohn有B头奶牛(1<=B<=25000)(1<=B<=25000)(1<=B<=25000), ...
- P2985 [USACO10FEB]吃巧克力Chocolate Eating
P2985 [USACO10FEB]吃巧克力Chocolate Eating 题目描述 Bessie has received N (1 <= N <= 50,000) chocolate ...
随机推荐
- Android开发--数据存储之File文件存储
转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...
- vscode实现列编辑
ctrl + shift + 左键选择要编辑的列 好用,再也不用使用\n替换了
- 【Data Structure & Algorithm】 查找最小的k个元素
查找最小的k个元素 题目:输入n个整数,输出其中最小的k个. 例如输入1, 2, 3, 4, 5, 6, 7和8这八个数字,则最小的4个数字为1, 2, 3和4. 分析:这道题最简单的思路是把输入的n ...
- 常用的网站站长SEO工具
网站管理员工具 网站管理员工具需要对网站域名所有权进行验证,通常是通过上传指定文件.增加META或者修改网站DNS来验证管理员身份,通过验证后,网站管理员可以查询到自己网站的各类统计信息. 1. Go ...
- 洛谷 - P1552 - 派遣 - 左偏树 - 并查集
首先把这个树建出来,然后每一次操作,只能选中一棵子树.对于树根,他的领导力水平是确定的,然后他更新答案的情况就是把他子树内薪水最少的若干个弄出来. 问题在于怎么知道一棵子树内薪水最少的若干个分别是谁. ...
- 萌新三分讲解+基础题ZOJ3203【三分凸性】
(温馨提示:图片外部食用更加) mid=(left+right)>>1,midmid=(mid+right)>>1; 举凸性函数的例子: 首先我们一定要明确问题:求极值,这里是 ...
- Android NDK开发指南(二)Android.mk文件
http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1. 概述 Android.mk文件是用来描述build sy ...
- Python Matplotlib 中对于 bar 显示时间的问题
参考: 官方教程: http://matplotlib.org/1.3.1/users/recipes.html http://stackoverflow.com/questions/13515471 ...
- C 语言实例 - 将字符串写入文件
C 语言实例 - 将字符串写入文件 C 语言实例 C 语言实例 将字符串写入文件. 实例 #include <stdio.h> #include <stdlib.h> /* e ...
- 解决“每次启动Access2010时都要求配置VS2008”的办法
我每次启动Access2010时都会要求配置VS2008,这大概是VS2008与office(Access2010)有冲突引起的.这里提供一种解决办法. 依次选择Access2010的文件-选项中-加 ...