|
|
|
@ -3,17 +3,21 @@ 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; // 用于记录每段路径所花的费用
|
|
|
|
|
int n, m; // 铁路途经n个城市,要去m个城市
|
|
|
|
|
int p[N]; // 记录经过站点的顺序
|
|
|
|
|
int a[N], b[N], c[N]; // 记录每段路径所花的费用
|
|
|
|
|
int t[N]; // 记录站点之间的路径经过的次数
|
|
|
|
|
int ans; // 答案
|
|
|
|
|
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表示,且每一段都用前面较小的点作为标记!!!!
|
|
|
|
|
// 所有的区间都以较小的点排在前面,例如:2-1,5-3都用1-2,3-5表示,
|
|
|
|
|
// 且每一段都用前面较小的点作为标记!!!!
|
|
|
|
|
for (int i = 1; i < m; i++) {
|
|
|
|
|
int x, y;
|
|
|
|
|
if (p[i] > p[i + 1]) {
|
|
|
|
|
x = p[i + 1];
|
|
|
|
|
y = p[i];
|
|
|
|
@ -24,9 +28,7 @@ signed main() {
|
|
|
|
|
t[x]++;
|
|
|
|
|
t[y]--;
|
|
|
|
|
}
|
|
|
|
|
for (int i = 1; i <= n; i++) { // 求前缀和
|
|
|
|
|
t[i] += t[i - 1];
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|