[Luogu] P9735 题解

P9735 题解

题意很清楚,看不懂就多看几遍。

定义一个数组,存储第一个车站到第 \(i\) 个车站所需的时间,然后循环计算两个车站之间的所需的时间,并计算最小值和更新序号。

时间计算:

字符串 \(s=\text{Patrik}\) 时,时间等于 \(t_i\)
\(s=\text{Josip}\) 时,总时间就等于第一个车站到第 \(y_i\) 个车站的时间加上 \(t_i\)

将时间存入数组并计算最小值和序号即可。

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll N = 1145141;

ll n, t, y, p[N], minn = N, ans;
string s;

int main() {
	
	cin >> n;
	for (ll i = 2; i <= n; ++i) {
		cin >> s;
		if (s[0] == 'P') {
			cin >> t;
			p[i] = t;
		}
		if (s[0] == 'J') {
			cin >> y >> t;
			p[i] = p[y] + t;
		}
	}
	for (ll i = 2; i <= n; ++i) {
		if (p[i] - p[i - 1] < minn) {
			minn = p[i] - p[i - 1];
			ans = i;
		}
	}
	cout << minn << ' ' << ans - 1 << ' ' << ans;
	
    return 0;
}
posted @ 2023-11-17 20:49  FurippuWRY  阅读(26)  评论(0)    收藏  举报