#include using namespace std; #define int long long #define endl "\n" const int N = 100010; int n, m, ans; int p[N]; // 用于记录经过站点的顺序 int t[N]; // 用于记录站点之间的路径经过的次数 int a[N], b[N], c[N], x, y; // 用于记录每段路径所花的费用 signed main() { cin >> n >> m; for (int i = 1; i <= m; i++) cin >> p[i]; for (int i = 1; i < n; i++) cin >> a[i] >> b[i] >> c[i]; for (int i = 1; i < m; i++) { // 所有的区间都以较小的点排在前面,例如:2-1,5-3都用1-2,3-5表示,且每一段都用前面较小的点作为标记!!!! if (p[i] > p[i + 1]) { x = p[i + 1]; y = p[i]; } else { x = p[i]; y = p[i + 1]; } t[x]++; t[y]--; } for (int i = 1; i <= n; i++) { // 求前缀和 t[i] += t[i - 1]; } for (int i = 1; i <= n - 1; i++) ans += min(a[i] * t[i], (b[i] * t[i] + c[i])); // 求总的最小就是把每一段的最小相加 cout << ans << endl; }