首页 > 其他分享 >洛谷题解-P3003 [USACO10DEC] Apple Delivery S (dijkstra)

洛谷题解-P3003 [USACO10DEC] Apple Delivery S (dijkstra)

时间:2024-01-28 10:22:27浏览次数:36  
标签:终点 洛谷 Apple int 题解 2PA P1 牛路 dis

题目描述

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.

输入格式

* 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

输出格式

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

题意翻译

贝西有两个又香又脆的红苹果要送给她的两个朋友。当然她可以走的 C(1≤C≤200000)C(1 \le C \le 200000)C(1≤C≤200000) 条“牛路”都被包含在一种常用的图中。这张图同时包含了P(1≤P≤100000)P(1 \le P \le 100000)P(1≤P≤100000) 个牧场,分别被标为 1⋯P1 \cdots P1⋯P。没有“牛路”会从一个牧场又走回它自己。“牛路”是双向的,每条牛路都会被标上一个距离。最重要的是,每个牧场都可以通向另一个牧场。每条牛路都连接着两个不同的牧场 P1_iP1\_iP1_i和P2_iP2\_iP2_i(1≤P1_i,P2_i≤P1 \le P1\_i,P2\_i \le P1≤P1_i,P2_i≤P),距离为D_iD\_iD_i。所有“牛路”的距离之和不大于 200000000020000000002000000000。

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

输入输出样例

输入 #1
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 
输出 #1
12 



注意,没有“牛路”会从一个牧场又走回它自己。(刚开始读题省略了这句话导致没A)
所以不能从起点到终点1,然后回到起点再到终点2!!!
必须是起点到终点1,终点1到终点2,或者起点到终点2,终点2到终点1

所以,不是所有题的最短路都是从起点到终点1,返回起点,再到另外一个终点2
要注意读题,可能是起点到终点1,终点1到终点2;也可能是起点到终点2,终点2到终点1
(被坑了)
#include <bits/stdc++.h>
using namespace std;
 
const int N=200005;
struct node
{
	int v, w;
	bool operator <(const node &A) const
	{
		return w>A.w;
	}
};
int n, m, s, t1, t2, u1, v1, w1, dis[N], vis[N], ans=0;
vector<node> a[N];
priority_queue<node> q;
void dij(int t)
{
	memset(dis, 63, sizeof dis);
	memset(vis, 0, sizeof vis);
	dis[t]=0, q.push({t, 0});
	
	while (!q.empty())
	{
		int u=q.top().v;
		q.pop();
		
		if (vis[u]) continue;
		vis[u]=1;
		
		for (int i=0; i<a[u].size(); i++)
		{
			int v=a[u][i].v, w=a[u][i].w;
			if (!vis[v] && dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				q.push({v, dis[v]});
			}
		}
	}
}
int main()
{
    scanf("%d%d%d%d%d", &m, &n, &s, &t1, &t2);
    for (int i=1; i<=m; i++)
    {
    	scanf("%d%d%d", &u1, &v1, &w1);
    	a[u1].push_back({v1, w1});
    	a[v1].push_back({u1, w1});
	}
	dij(s);
	if (dis[t1]<dis[t2])
	{
		ans=dis[t1];
		dij(t1);
		ans+=dis[t2];
	}
	else
	{
		ans=dis[t2];
		dij(t2);
		ans+=dis[t1];
	}
	printf("%d", ans);
    return 0;
}

 



标签:终点,洛谷,Apple,int,题解,2PA,P1,牛路,dis
From: https://www.cnblogs.com/didiao233/p/17992525

相关文章

  • CF765F Souvenirs 题解
    题目链接:CF或者洛谷想了很久,然后想起做过的一道题:秃子酋长,一开始以为差不多,结果写着写着就发现不对劲了。最后写出了个神仙回滚莫队解法,感觉很妙,记录下。进入神仙分析时刻首先,我们来考虑一个事实,加上一个数以后,如果能找到它的前后驱,那么可以立马更新最优解,这个也即是瓶颈点。......
  • ABC338 题解(A-E)
    前言:F,G后续补充。A题意判断一个字符串,是否满足只有第一位为大写字母,其余为小写字母。Sol字面意思模拟即可。Code#include<bits/stdc++.h>#definelllonglong#defineN200005#defineendl"\n"#definefifirst#definesesecondusingnamespacestd;constll......
  • 洛谷题单指南-排序-P1923 【深基9.例4】求第 k 小的数
    原题链接:https://www.luogu.com.cn/problem/P1923题意解读:要最快的求第k小的数,O(n)的做法是利用快排的思想对数据进行划分第一步、取分界点x,通常设x=a[(l+r)/2]第二步、将小于x的挪到x左边,将大于x的挪到x右边第三步、比较,如果x左边的个数大于k,则继续递归处理左边,否则递......
  • AndroidStudio 编辑xml布局文件卡死问题解决
    之前项目编写的都是正常,升级AndroidStudio后编辑布局文件就卡死,还以为是AndroidStudio文件。其实不然,我给整个项目增加了版权声明。所以全部跟新后,布局文件也增加了版权声明。估计AndroidStudio在解析布局文件时候因为有版权声明的原因导致卡死,所以删除版权声明就可以了。可以......
  • 洛谷题解-P1821 [USACO07FEB] Cow Party S
    https://www.luogu.com.cn/problem/P1821题目描述寒假到了,nnn头牛都要去参加一场在编号为xxx的牛的农场举行的派对,农场之间有mmm条有向路,每条路都有一定的长度。每头牛参加完派对后都必须回家,无论是去参加派对还是回家,每头牛都会选择最短路径,求这nnn头牛的最短路径(一个......
  • 洛谷题解-P1673 [USACO05FEB] Part Acquisition S
    https://www.luogu.com.cn/problem/P1673题目描述奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤5×104)N(1\leN\le5\times10^4)N(1≤N≤5×104)颗行星,在行星上进行交易。为了方便,奶牛们已经给可能出现的K(1≤K≤103)K(1\leK\le10^3)K(1≤K≤103)......
  • CF739A Alyona and mex 题解
    题目传送门前置知识贪心|构造解法从贪心的角度分析,最小的\(\operatorname{mex}\)仅会与长度最小的区间有关;另外为使得\(\operatorname{mex}\)最大,当\(\operatorname{mex}\)等于区间长度的时候即为所求。记\(ans\)表示此时得到的答案。构造序列时,长度最小的区间一定......
  • CF1433E Two Round Dances 题解
    题目传送门前置知识圆排列解法\(\dfrac{Q_{n}^{\frac{n}{2}}Q_{\frac{n}{2}}^{\frac{n}{2}}}{A_{2}^{2}}\)即为所求。同时因为\(n\le20\)和没有模数,所以不需要处理逆元,暴力算即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineu......
  • AppleScript成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署苹......
  • 洛谷 P1749 [入门赛 #19] 分饼干 II 题解
    题目传送门先给结论:记\(S=1+2+\dots+k\),则当\(N\geS\)时为YES,当\(N<S\)时为NO。严谨一点,证明如下:若能成功分配饼干,记\(k\)名小朋友拿到的饼干数量分别为\(a_1,a_2,\dots,a_k\)。由于饼干数量各不相同且均为整数,不妨设\(a_1<a_2<\dots<a_k\),则\(a_2\gea_1+1,a_3\g......