[COCI2022-2023#2] Tramvaji

[COCI2022-2023#2] Tramvaji

题意

对于每个车站 i,给出一条信息。

从车站 j<i 到车站 i 花费了时间 t

求出哪两个站之间花费的时间最少。

思路

考虑求出 si 表示从 1i 的最少时间。

答案即 mini=2nsisi1

对于给出的信息 (i,j,t)sj=minsi+t

代码

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N = 1e3 + 5;
int n, a[N][N], sum[N], ans = 1e9;
pii ANS;
void solve() {
	cin >> n;
	string op;
	memset(sum, 0x3f, sizeof(sum));
	memset(a, 0x3f, sizeof(a));
	for (int i = 2; i <= n; i ++) {
		cin >> op;
		if (op == "Patrik") {
			int t; cin >> t;
			a[1][i] = t; 
		}
		if (op == "Josip") {
			int y, t; cin >> y >> t;
			a[y][i] = t;
		}
	}
	sum[1] = 0;
	for (int i = 2; i <= n; i ++) {
		for (int j = 1; j < i; j ++) {
			sum[i] = min(sum[i], sum[j] + a[j][i]);
		}
	}
	for (int i = 2; i <= n; i ++) {
		if (sum[i] - sum[i - 1] < ans) {
			ans = sum[i] - sum[i - 1];
			ANS = {i - 1, i};
		}
	}
	cout << ans << " " << ANS.fi << " " << ANS.se << "\n"; 
}
signed main() {
	int T = 1;
//	cin >> T;
	while (T --)
		solve();
	return 0;
}
posted @   maniubi  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示