题解 P3406 【海底高铁】
本题可以使用差分数组和前缀和求出每一段需要经过的次数 再用贪心策略在2种买票方式中选择
#include<bits/stdc++.h>
using namespace std;
int n,m,p,c[100005],p2,p1,a,b,c1;
long long sum,ans;
int main()
{
cin>>n>>m;
if(m>0)cin>>p1;
for(int i=2;i<=m;i++)
{
cin>>p2;
if(p1<p2)c[p1]++,c[p2]--;
else c[p2]++,c[p1]--;
p1=p2;
}
for(int i=1;i<n;i++)
{
sum+=c[i];
cin>>a>>b>>c1;
if(sum!=0)ans+=min(a*sum,b*sum+c1);
}
if(m<=1)ans=0;
cout<<ans;
return 0;
}