洛谷P2984 [USACO10FEB]给巧克力Chocolate Giving
来源:互联网 发布:sql表不允许保存更改 编辑:程序博客网 时间:2024/04/27 02:13
题目描述
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
说明
输入格式:
第一行:三个用空格隔开的整数N,M和B。
第二到M+1行:第i+1行用R_i,S_i和L_i三个用空格隔开的整数描述双向边i。
第M+2到M+B+1行:第M+i+1行包含两个用空格隔开的整数P_i和Q_i。
输出格式:
第一到B行:第i行包括一个整数,居住在农场P_i的公牛从FJ那里取得情人节巧克力后送给他居住在农场Q_i的梦中情牛至少需要走的距离。
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#define MAX 99999999#define MAXM 200010using namespace std;int n,m,q,c=1,s,t,head[MAXM],path[MAXM];bool vis[MAXM];struct node{int next,to,w;}a[MAXM];inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;}inline int relax(int u,int v,int w){if(path[v]>path[u]+w){path[v]=path[u]+w;return 1;}return 0;}void add(int u,int v,int w){a[c].to=v;a[c].w=w;a[c].next=head[u];head[u]=c++;a[c].to=u;a[c].w=w;a[c].next=head[v];head[v]=c++;}void spfa(){int u,v;queue<int> q;for(int i=1;i<=n;i++){path[i]=MAX;vis[i]=false;}q.push(1);path[1]=0;vis[1]=true;while(!q.empty()){u=q.front();q.pop();vis[u]=false;for(int i=head[u];i;i=a[i].next){v=a[i].to;if(relax(u,v,a[i].w)&&!vis[v]){vis[v]=true;q.push(v);}}}}int main(){int u,v,w;n=read();m=read();q=read();for(int i=1;i<=m;i++){u=read();v=read();w=read();add(u,v,w);}spfa();while(q--){s=read();t=read();printf("%d\n",path[s]+path[t]);}return 0;}
- 洛谷P2984 [USACO10FEB]给巧克力Chocolate Giving
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
- USACO 2010 Feb Chocolate Giving 领取巧克力
- P2985 [USACO10FEB]吃巧克力
- BNUOJ 4157 Chocolate Giving
- chocolate giving[usaco2010 Feb]
- bzoj2015 [Usaco2010 Feb]Chocolate Giving
- [BZOJ2015][Usaco2010 Feb]Chocolate Giving
- [bzoj2015&&Usaco2010 Feb] Chocolate Giving
- 2015: [Usaco2010 Feb]Chocolate Giving
- BZOJ2015 [Usaco2010 Feb]Chocolate Giving
- uva1099 - Sharing Chocolate 切巧克力
- BZOJ 2015: [Usaco2010 Feb]Chocolate Giving spfa
- bzoj 2015: [Usaco2010 Feb]Chocolate Giving
- HDU 4301 Divide Chocolate 巧克力分割dp
- bzoj2015 [Usaco2010 Feb]Chocolate Giving(最短路裸题)
- 洛谷 P2982 [USACO10FEB]慢下来Slowing down
- 洛谷 P2982 [USACO10FEB]慢下来Slowing down
- xss的用法
- Elasticsearch学习笔记(二) mysql数据同步
- 4-16译码器
- VC++信息安全编程(13)Windows2000/xp/vista/7磁盘扇区读写技术
- learn more study less:如何高效学习
- 洛谷P2984 [USACO10FEB]给巧克力Chocolate Giving
- xgboost如何传入稀疏矩阵加快训练(利用scipy sparse模块)
- inotify + rsync 目录同步脚本
- Material Design风格登录界面实现总结(一)
- 用JS实现加载页面前弹出模态框
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例
- JavaScript中的隐式转换 总结
- 神经网络 ANN 分类器 OpenCV实现 例子
- seq_file接口编程浅析