一、【P3406】海底高铁(差分+贪心)
由于本题涉及到线路问题,需要统计Uim途径每条线路的次数,而且Uim每次的轨迹都是很长一段路径,所以需要使用一个合理的数据结构来维护区间的变化,首先想到线段树和树状数组,但是由于本题可以直接采用差分数组来维护变化情况,故采用最简单的方法。
1.1 解题思路
1.2 AC代码
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
#include <queue>
#include <map>
#include <set>using namespace std;long long d[100005] = { 0 };
int main()
{int n, m;cin >> n >> m;int begin, end; cin >> begin;for (int i = 2; i <= m; i++){cin >> end;d[min(begin, end)]++; //差分d[max(begin, end)]--; //由于是对线路求差分,而输入的是站点,所以不用加一begin = end;}for (int i = 1; i < n; i++){d[i] = d[i - 1] + d[i]; //前缀和}long long total = 0;int A, B, C;for (int i = 1; i < n; i++){cin >> A >> B >> C;total += min(d[i] * A, C + B * d[i]);}if (m <= 1) total = 0;cout << total;
}