洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery

洛谷传送门

JDOJ 2717: USACO 2010 Dec Silver 1.Apple Delivery

JDOJ传送门

Description

Bessie has two crisp red apples to deliver to two of her friends

in the herd. Of course, she travels the C (1 <= C <= 200,000)

cowpaths which are arranged as the usual graph which connects P (1

<= P <= 100,000) pastures conveniently numbered from 1..P: no cowpath

leads from a pasture to itself, cowpaths are bidirectional, each

cowpath has an associated distance, and, best of all, it is always

possible to get from any pasture to any other pasture. Each cowpath

connects two differing pastures P1_i (1 <= P1_i <= P) and P2_i (1

<= P2_i <= P) with a distance between them of D_i. The sum of all

the distances D_i does not exceed 2,000,000,000.

What is the minimum total distance Bessie must travel to deliver

both apples by starting at pasture PB (1 <= PB <= P) and visiting

pastures PA1 (1 <= PA1 <= P) and PA2 (1 <= PA2 <= P) in any order.

All three of these pastures are distinct, of course.

Consider this map of bracketed pasture numbers and cowpaths with

distances:

                3        2       2
[1]-----[2]------[3]-----[4]
\ / \ /
7\ /4 \3 /2
\ / \ /
[5]-----[6]------[7]
1 2

If Bessie starts at pasture [5] and delivers apples to pastures [1]

and [4], her best path is:

      5 -> 6-> 7 -> 4* -> 3 -> 2 -> 1*

with a total distance of 12.

Input

* Line 1: Line 1 contains five space-separated integers: C, P, PB,

PA1, and PA2

* Lines 2..C+1: Line i+1 describes cowpath i by naming two pastures it

connects and the distance between them: P1_i, P2_i, D_i

Output

* Line 1: The shortest distance Bessie must travel to deliver both

apples

Sample Input

9 7 5 1 4 5 1 7 6 7 2 4 7 2 5 6 1 5 2 4 4 3 2 1 2 3 3 2 2 2 6 3

Sample Output

12

题目翻译:

贝西有两个又香又脆的红苹果要送给她的两个朋友。当然她可以走的C(1<=C<=200000)条“牛路”都被包含在一种常用的图中,包含了P(1<=P<=100000)个牧场,分别被标为1..P。没有“牛路”会从一个牧场又走回它自己。“牛路”是双向的,每条牛路都会被标上一个距离。最重要的是,每个牧场都可以通向另一个牧场。每条牛路都连接着两个不同的牧场P1_i和P2_i(1<=P1_i,p2_i<=P),距离为D_i。所有“牛路”的距离之和不大于2000000000。

现在,贝西要从牧场PB开始给PA_1和PA_2牧场各送一个苹果(PA_1和PA_2顺序可以调换),那么最短的距离是多少呢?当然,PB、PA_1和PA_2各不相同。

题解:

这道题如果用裸的SPFA做会TLE,所以要加优化。

如果有像20分钟之前的我一样对SPFA算法优化一无所知的人,请移步我的上一篇博客:

优化SPFA基础知识传送门

但是光知道怎么优化是不够的,我们还要就这个题想一想怎么写。

首先,这个题的源点不再是一,所以SPFA的时候要传参数。

其次,最后统计答案的时候要比较一下。

最后,拍一遍SPFA模板(SLF LLL优化版都可以)(本蒟蒻比较喜欢SLF),AC。

注意双向边的问题。

CODE:

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int m,n,s,t1,t2;
int tot,to[400001],val[400001],nxt[400001],head[100001];
int dist[100001],v[100001];
void add(int x,int y,int z)
{
to[++tot]=y;
val[tot]=z;
nxt[tot]=head[x];
head[x]=tot;
}
void spfa(int start)
{
memset(v,0,sizeof(v));
memset(dist,0x3f,sizeof(dist));
deque<int> q;
dist[start]=0;
v[start]=1;
q.push_front(start);
while(!q.empty())
{
int x=q.front();
q.pop_front();
v[x]=0;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(dist[x]+val[i]<dist[y])
{
dist[y]=dist[x]+val[i];
if(!v[y])
{
if(!q.empty() && dist[y]<dist[q.front()])
q.push_front(y);
else
q.push_back(y);
v[y]=1;
}
}
}
}
}
int main()
{
scanf("%d%d%d%d%d",&m,&n,&s,&t1,&t2);
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
int ans1=0;
int ans2=0;
spfa(t1);
ans1+=dist[t2]+dist[s];
spfa(t2);
ans2+=dist[t1]+dist[s];
int ans=min(ans1,ans2);
printf("%d",ans);
return 0;
}

USACO Apple Delivery的更多相关文章

  1. BZOJ 2100: [Usaco2010 Dec]Apple Delivery( 最短路 )

    跑两遍最短路就好了.. 话说这翻译2333 ---------------------------------------------------------------------- #includ ...

  2. 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery

    P3003 [USACO10DEC]苹果交货Apple Delivery 题目描述 Bessie has two crisp red apples to deliver to two of her f ...

  3. 洛谷——P3003 [USACO10DEC]苹果交货Apple Delivery

    P3003 [USACO10DEC]苹果交货Apple Delivery 这题没什么可说的,跑两遍单源最短路就好了 $Spfa$过不了,要使用堆优化的$dijkstra$ 细节:1.必须使用优先队列+ ...

  4. 洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery

    洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery 题目描述 Bessie has two crisp red apples to deliver to two of he ...

  5. bzoj2100 [Usaco2010 Dec]Apple Delivery

    Description Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, ...

  6. P3003 [USACO10DEC]苹果交货Apple Delivery

    题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...

  7. 【bzoj2100】[Usaco2010 Dec]Apple Delivery 最短路

    题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...

  8. 【BZOJ】2100: [Usaco2010 Dec]Apple Delivery(spfa+优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2100 这题我要吐血啊 我交了不下10次tle.. 噗 果然是写挫了. 一开始没加spfa优化果断t ...

  9. Dijkstra【p3003(bzoj2100)】[USACO10DEC]苹果交货Apple Delivery

    Description 贝西有两个又香又脆的红苹果要送给她的两个朋友.当然她可以走的C(1<=C<=200000)条"牛路"都被包含在一种常用的图中,包含了P(1< ...

随机推荐

  1. Nginx+Tomcat+Memcache 实现session共享

    Nginx + Tomcat + Memcache 实现session共享 1. Nginx 部署 1.上传源码包到服务器,解压安装 下载地址:http://nginx.org/en/download ...

  2. HTML+css基础 css的几种形式 css选择器的两大特性

    3.外联样式 css选择器的两大特性 1.继承性:所有跟文本字体有关的属性都会被子元素继承.且权重是0000. 2.层叠性:就是解决选择器权重大小的一种能力,就是看那个选择器的权重大.谁的权重大听谁的 ...

  3. 奥展项目笔记07--vue绑定下拉框和checkbox总结

    1.vue绑定下拉框 <div class="col-md-1 data"> <select class="form-control " v- ...

  4. GO学习笔记 - 数据校验

    本文主题:基于asaskevich/govalidator实现Golang数据校验 小慢哥的原创文章,欢迎转载 目录 ▪ 一. asaskevich/govalidator介绍 ▪ 二. 字符串匹配 ...

  5. 【Python】itertools之product函数

    [转载]源博客 product 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即: product(A, B) 和 ((x,y) for x in ...

  6. WPF ListView ,XML

    <?xml version="1.0" encoding="utf-8" ?><PersonList> <Person Id=&q ...

  7. ORACLE 求和(多列)

    SELECT SUM(列名),SUM(列名),SUM(列名),SUM(列名) FROM 表名

  8. c++实现文件复制并修改相应属性

    问题描述 完成一个目录复制命令mycp,包括目录下的文件和子目录, 运行结果如下: beta@bugs.com [~/]# ls –la sem total 56 drwxr-xr-x 3 beta ...

  9. jmeter入门操作 = 录制

    没安装工具的朋友请先看:https://www.cnblogs.com/cainiaoxiansheng/p/11007754.html 软件装好,功能了解好,那么就开始进入正题,先来一波录制 不要鄙 ...

  10. Lucene为什么要加Segment概念

    目前我感觉加了Segment有两个好处: 1. 简化了写文档的逻辑,解耦了写文档和读文档.如果没有Segment在写文档的时候势必要修改整个索引,所以会影响到文档的读 2. 提升了写文档的速度,由于只 ...