P3406 海底高鐵 差分

2021-10-24 11:24:37 字數 1584 閱讀 4663

題目背景

大東亞海底隧道連線著廈門、新北、博艾、那霸、鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2023年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣、博艾和日本,全程只需要4個小時。

題目描述

該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每經過兩個相鄰的城市之間(方向不限),必須單獨購買這一小段的車票。第i段鐵路連線了城市i和城市i+1(1<=i雖然一些事情沒有協調好,各段鐵路公司也為了方便乘客,推出了ic卡。對於第i段鐵路,需要花ci博艾元的工本費購買一張ic卡,然後乘坐這段鐵路一次就只要扣bi(biuim現在需要出差,要去m個城市,從城市p1出發分別按照p1,p2,p3…pm的順序訪問各個城市,可能會多次訪問乙個城市,且相鄰訪問的城市位置不一定相鄰,而且不會是同乙個城市。

現在他希望知道,出差結束後,至少會花掉多少的錢,包括購買紙質車票、買卡和充值的總費用。

輸入格式

第一行兩個整數,n,m。

接下來一行,m個數字,表示pi

接下來n-1行,表示第i段鐵路的ai,bi,ci

輸出格式

乙個整數,表示最少花費

輸入輸出樣例

輸入 #1

9 10

3 1 4 1 5 9 2 6 5 3

200 100 50

300 299 100

500 200 500

345 234 123

100 50 100

600 100 1

450 400 80

2 1 10

輸出 #1

說明/提示

2到3以及8到9買票,其餘買卡。

對於30%資料 m=2

對於另外30%資料 n<=1000 ,m<=1000

對於100%的資料 m,n<=100000,ai,bi,ci<=100000

再次印證了那句話,往往bug越難找,犯的錯誤就越低階。。。

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e5+10;

int a[maxn]

;int times[maxn]

;int n, m;

int cost[maxn][4

];intmain()

for(

int i =

1; i <= n;i++

) times[i]

+= times[i -1]

;// for(int i = 1; i <= n;i++)

// cout << i << " " << times[i] << endl;

// cout << endl;

long

long ans =0;

for(

int i =

1; i <= n; i++

) cout << ans << endl;

return0;

}

P3406 海底高鐵

不要小看了這個資料範圍 首先明確一下題意,對於樣例中的訪問順序3 1 4 1 5 9 2 6 5 3,它意味著 數字代表城市 從 3 出發,依次經過2 3間的鐵路,1 2間的鐵路,到達1 再從 1 出發,依次經過1 2,2 3,3 4之間的鐵路,到達4,以此類推.顯然,對於任意一段鐵路,可以根據訪問...

洛谷 P3406 海底高鐵 差分

p3406 海底高鐵 基本思路 對於其中一小段,我們要麼全部買紙票,要麼全部刷卡。所以我們只需要統計每一小段經過的總次數。如果你暴力模擬統計的話,估計 一定會tle。接下來來看一組例子 六個數 0 0 0 0 0 0 如果想讓它從第二個到第五個數全部 1,則為 0 1 1 1 1 0 如果這樣模擬 ...

洛谷P3406 海底高鐵

大東亞海底隧道連線著廈門 新北 博艾 那霸 鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2058年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣 博艾和日本,全程只需要4個小時。該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每經過兩個相鄰的城市之...